Session
会话技术
- 会话:一次会话中包含多次请求和响应。
- 一次会话:浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开为止
- 功能:在一次会话的范围内的多次请求间,共享数据
- 方式:
- 客户端会话技术:Cookie
- 服务器端会话技术:Session
Session
-
概念:服务器端会话技术,在一次会话的对此请求间共享数据,将数据保存在服务器端的对象中。HttpSession
-
原理:Session的实现是依赖于Cookie的
服务器如何确保在一次会话范围内,多次获取的Session对象时同一个?
- 第一次请求获取Session,没有Cookie,会在内存中创建一个新的Session对象(假设Session的id为xxx),然后响应:set-cookie:JSESSIONID=xxx
- 之后的请求会带上这个cookie,例:cookie:JSESSIONID=xxx
-
细节:
-
当客户端关闭后,服务器不关闭,两次获取的Session是否为同一个?
- 默认情况下不是
- 如果需要相同,可以设置一个cookie,key为JSESSIONID,value为Session的id,让cookie持久化(setMaxAge方法)
-
客户端不关闭,服务器关闭后,两次获取的Session是否为同一个?
- 不是同一个(服务器关闭后被销毁),但是要确保数据不丢失(Tomcat上部署的项目自动完成session的序列化和反序列化,idea中跑的项目因为work目录在重启时会被销毁然后新建,所以反序列没有效果)
- session的钝化(序列化):
- 在服务器关闭之前,将session对象序列化到硬盘
- session的活化(反序列化):
- 在服务器启动后,将session文件转化为内存中的session对象即可
- session的钝化(序列化):
- 不是同一个(服务器关闭后被销毁),但是要确保数据不丢失(Tomcat上部署的项目自动完成session的序列化和反序列化,idea中跑的项目因为work目录在重启时会被销毁然后新建,所以反序列没有效果)
-
Session什么时候被销毁?
- 服务器关闭
- session对象调用invalidate()
- session默认失效时间 30分钟
Tomcat配置文件web.xml选择性配置修改(D:\DevSoftware\apache-tomcat-9.0.62\conf\web.xml)
<session-config> <session-timeout>30</session-timeout> </session-config>
-
特点:
- session用于存储一次会话的多次请求的数据,存在服务器端
- session可以存储任意类型,任意大小的数据
- session与cookie对比
- session存储数据在服务器端,cookie存储在客户端
- session没有数据大小的限制,cookie有
- session数据安全,cookie相对不安全
-