一、会话技术
1、会话:是指浏览器和服务器之间的通信
2、一次会话:浏览器给服务器资源发送请求,会话建立,直到有一方断开为止(一次会话存在多次请求和响应)
3、会话技术
(1)客户端:Cookie
(2)服务器端:Session
4、使用会话技术的理由
(1)实际上会话问题解决的还是客户端与服务器之间的通信问题;通过一些会话技术,可以将每个用户的数据以例如 cookie/session 的形式存储,方便以后用户访问 web 资源的时候使用;
(2)那么能不能用我们之前学过的 HttpServletRequest 对象和 ServletContext 对象来保存这些数据呢?答案是否定的。
- 不能用 HttpServletRequest 的原因:我们的一次会话中,存在多次请求和响应,而浏览器客户端的每一次请求都会产生一个 HttpServletRequest 对象,它只会保存此次请求的信息。例如:放入购物车与购买付款是不同的请求,很显然数据没有得到很好的保存处理
- 不能用 ServletContext 的原因:ServletContext对象是被整个web应用所共享的,将数据都存到这里,无疑会无法区分具体信息的归属
二、Cookie
1、概念
客户端会话技术,将数据保存到客户端
2、快速入门
使用步骤:
创建Cookie对象,绑定数据
new Cookie(String name, String value)
发送Cookie对象
response.addCookie(Cookie cookie)
获取Cookie,拿到数据
Cookie[] request.getCookies()
3、实现原理
基于响应头 set-cookie 和请求头 cookie 实现
4、Cookie 的细节
(1)一次可以发送多个cookie
可以创建多个 Cookie 对象,使用 response 调用多次 addCookie 方法发送 cookie 即可
(2)cookie在浏览器中保存的时间
默认情况下,当浏览器关闭后,Cookie数据被销毁
持久化存储:
setMaxAge(int seconds)
正数:将Cookie数据写到硬盘的文件中;持久化存储。并指定 cookie 存活时间,时间到后,cookie 文件自动失效
负数:默认情况
零:删除 cookie 信息
(3)cookie能不能存中文
- 在tomcat 8 之前 cookie 不能直接存储中文数据。
需要将中文数据转码:一般采用 URL 编码(%E3)
- 在tomcat 8 之后,cookie 支持中文数据。
特殊字符(如:空格)还是不支持,建议使用 URL 编码存储,URL 解码解析
(4)cookie共享问题
a. 一个tomcat服务器中,部署了多个 web 项目,那么在这些 web 项目中 cookie 能不能共享?
- 默认情况下cookie不能共享
setPath(String path)
- 设置cookie的获取范围。默认情况下,设置当前的虚拟目录
- 如果要共享,则可以将path设置为 "/"
b. 不同的 tomcat 服务器间能不能共享?
setDomain(String path)
- 如果设置一级域名相同,那么多个服务器之间 cookie 可以共享
- setDomain(“.baidu.com”)
- 那么 tieba.baidu.com 和 news.baidu.com 中 cookie 可以共享
5、cookie 的特点和作用
(1)特点
- cookie存储数据在客户端浏览器
- 浏览器对于单个cookie 的大小有限制(4kb)以及 对同一个域名下的总 cookie 数量也有限制(20个)
(2)作用
- cookie一般用于存储少量的不太敏感的数据
- 在不登录的情况下,完成服务器对客户端的身份识别
三、案例:记住上一次访问时间
1、需求
访问一个Servlet,如果是第一次访问,则提示:您好,欢迎您首次访问
如果不是第一次访问,则提示:欢迎回来,您上次访问时间为:显示时间字符串
2、分析
(1)可以采用Cookie来完成
(2)在服务器中的 Servlet 判断是否有一个名为 lastTime 的 cookie
- 有:不是第一次访问
响应数据:欢迎回来,您上次访问时间为:2018年6月10日11:50:20
写回Cookie:lastTime=2018年6月10日11:50:01
- 没有:是第一次访问
响应数据:您好,欢迎您首次访问
写回Cookie:lastTime=2018年6月10日11:50:01
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix