社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
会话
:一次会话中包含多次请求和响应一次会话
:浏览器第一给服务器资源发送请求,会话建立,直到有一方断开为止会话的功能
:在一次会话的范围内的多次请求间共享数据
Cookie
,将来将数据存在客户端Session
,将来将数据存在服务器Cookie:客户端会话技术,将数据保存在客户端
使用步骤:
new Cookie(String name,String value)
response.addCookie(Cookie cookie)
Cookie[] request.getCookies()
可以
,创建多个Cookie对象,使用response对象的addCookie方法多次发送Cookie即可
默认
情况下,当浏览器关闭后
,Cookie数据被销毁设置Cookie声明周期
,使他持久化存储用Cookie对象调用setMaxAge(int seconds)方法
- 正数:将Cookie数据
写到硬盘文件中持久化存储
,second表示cookie存活时间,单位是秒- 负数:默认值,存
在浏览器内存中
,浏览器一关闭就销毁Cookie数据- 零:
删除Cookie数据
在Tomcat8
之前,Cookie中不能直接存储中文数据(需要将中文数据转码——一般采用URL编码),在Tomcat8之后,Cookie支持中文数据。
默认情况下Cookie不能共享
- setPath(String path):设置Cookie的获取范围,默认情况下设置当前项目的虚拟目录,如果要共享,则将path设置为:"/"
setDomain(String path):如果设置一级域名相同,那么多个服务器间Cookie共享
存储数据在客户端浏览器
浏览器对于单个Cookie的大小有限制
(一般4K左右,和浏览器有关)以及对同一个域名下的总Cookie数量也有限制
(一般20个左右,和浏览器有关)存储少量的不太敏感的数据
在不登录的情况下完成服务器对客户端的身份识别
(主要作用)Session:服务器端会话技术
,在一次会话的多次请求间共享数据
,将数据保存在服务器对象中
获取Session对象
:HttpSession session = request.getSession();使用HttpSession对象:
- Object getAttribute(String name)
- void setAttribute(String name,Object value)
- void removeAttribute(String name)
服务器如何确保在一次会话范围内多次获取的Session对象是同一个?
第一次获取Session,没有Cookie,会在内存中创建一个新的Session对象,他会有一个
唯一的ID
,接下来做响应时,会发送响应头:set-cookei:JSESSIONID=唯一的ID,客户端此时将Cookie信息存到浏览器,下次再次访问项目其他资源时通过cookie请求头
带过去了JSESSIONID,服务器自动获取cookie信息在根据这个信息查看内存中有没有和JSESSIOID对应的Session对象
,如果找到了,getSession方法就找到了这个对象并返回,所以两次的Session是同一个,服务器就是通过Cookie确保一次会话中获取的Session是同一个
默认情况下不是
//希望客户端关闭后再次获取Session能相同
Cookie cookie = new Cookie("JSSIONID",session.getId());
cookie.setMaxAge(60 * 60);
response.addCookie(cookie);
不是同一个
(就是偶然相同也是巧合),但是要确保数据不丢失(session的钝化和活化
——Tomcat已经完成了钝化和活化工作)
- session的
钝化
:在服务器正常关闭之前,将session对象序列化
到硬盘上- session的
活化
:在服务器启动后,将session文件转化(反序列化
)为内存中的session对象即可- 注意:IDEA可以完成钝化但是无法活化成功,要依靠本地的TomCat服务器去完成钝化和活化,但是实际开发中也不会在IDEA里面部署项目,所以关系不大
存储一次会话的多次请求的数据
,存储在服务器端
可用于存储任意类型、任意大小的数据
Session | Cookie | |
---|---|---|
存储位置 | 服务器端 | 客户端 |
大小限制 | 没有数据大小限制 | 有限制,与具体浏览器相关 |
安全性 | 相对安全 | 相对不安全 |
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!