- Session的使用
- 获取Session对象
- Session的原理分析
- Session钝化与活化、有效时间
- Session销毁
- Cookie和Session小结
Session:服务端会话跟踪技术,将数据保存到服务端。
- Session是存储在服务端而Cookie是存储在客户端;
- 存储在客户端的数据容易被窃取和截获,存在很多不安全的因素;
- 存储在服务端的数据相比于客户端来说就更安全;
Session使用的是request对象。
HttpSession session = request.getSession();
Session对象提供的功能
1.存储数据到 session 域中
void setAttribute(String key, Object o)
2.根据 key,获取值
Object getAttribute(String key)
3.根据 key,删除该键值对
void removeAttribute(String key)Session的原理分析
Session是基于Cookie实现的,Session实现的也是一次会话中的多次请求之间的数据共享。即关闭浏览器现有的Session就会被销毁。
Session一次会话多次请求之间,多次请求获取Session的对象是同一个。
Session如何保证在一次会话中获取的Session对象是同一个
在第一次获取session对象的时候,session对象会有一个唯一的标识id,假如是id:10。在生成session的Java类处理完请求后,需要通过Tomcat服务器响应结果给浏览器。Tomcat服务器发现业务处理中使用了session对象,就会把session的唯一标识id:10当做一个cookie,添加Set-Cookie:JESSIONID=10到响应头中,并响应给浏览器。
浏览器接收到响应结果后,会把响应头中的coookie数据存储到浏览器的内存中,再次访问同一网站时,浏览器就 会把cookie中的数据按照cookie: JESSIONID=10的格式添加到请求头中并发送给服务器Tomcat。
需要读取session的Java类就会从请求头中就读取cookie中的JSESSIONID值为10,然后就会到服务器内存中寻找id:10的session对象,如果找到了,就直接返回该对象,如果没有则新创建一个session对象。
Session钝化与活化、有效时间服务器重启后,Session中的数据是否还在?
服务器正常关闭时,Tomcat会将Session对象序列化保存到本地,下次启动时再读入内存中。
钝化
在服务器正常关闭后,Tomcat会自动将Session数据写入硬盘的文件中。
钝化的数据路径为:项目目录targettomcatworkTomcatlocalhost项目名称SESSIONS.ser
活化
再次启动服务器后,从文件中加载数据到Session中,数据加载到Session中后,路径中的SESSIONS.ser文件会被删除掉。
生存周期
关闭浏览器现有的Session就会被销毁。session的数据要想共享,浏览器不能关闭,所以session数据不能长期保存数据。
cookie是存储在客户端,是可以长期保存。
session的销毁会有两种方式:
1.默认情况下,无操作,30分钟自动销毁,可以在项目的web.xml中配置
//设置有效期为100分钟 100
如果没有配置,默认是30分钟,默认值是在Tomcat的web.xml配置文件中的固定值。
2.调用Session对象的invalidate()进行销毁
session.invalidate();Cookie和Session小结
Cookie 和 Session 都是来完成一次会话内多次请求间数据共享的。
- 区别:
- 存储位置:Cookie 是将数据存储在客户端,Session 将数据存储在服务端
- 安全性:Cookie不安全,Session安全
- 数据大小:Cookie最大3KB,Session无大小限制
- 存储时间:Cookie可以通过setMaxAge()长期存储,Session默认30分钟
- 服务器性能:Cookie不占服务器资源,Session占用服务器资源
使用场景
- Cookie是用来保证用户在未登录情况下的身份识别
- Session是用来保存用户登录后的数据
介绍完Cookie和Session以后,具体用哪个还是需要根据具体的业务进行具体分析。



