Session的使用细节
Session的使用细节
Session 是服务端保存的会话状态。浏览器每次请求能“命中同一个 Session”,依赖一个会话标识(最常见是 JSESSIONID Cookie)。因此它与 Cookie 是一条链路上的两个环节。
关联:Session / 会话跟踪技术 / Cookie的使用细节
注意:命令行启动项目,如启动cookie-demo项目
cd cookie-demo
mvn tomcat7:run
Session 如何识别“同一个客户端”
- 默认:通过
JSESSIONIDCookie 关联到服务端 Session - 备选:URL 重写(把 sessionId 拼到 URL 上),但更不安全也更不常用
因此“禁用 Cookie”会显著影响 Session 的可用性。
- Session钝化、活化
- 服务器重启后,Session中的数据是否存在?
- 钝化:在服务器正常关闭后,Tomcat会自动将Session数据写入硬盘的文件中
- 活化:再次启动服务器后,从文件中加载数据到Session中。注意:浏览器不能关闭,否则就是不同的session了
- Session销毁
-
默认情况下,无操作,30分钟后自动销毁
<session-config> <session-timeout>30</session-timeout> </session-config> -
调用Session对象的invalidate()方法
-
使用上的两个“安全提醒”
- 不要把敏感明文(密码、验证码原值等)长期放 Session;放必要信息并设置合理过期
- 登录成功后建议更换 Session 标识,降低会话固定攻击风险(工程上常见做法:登录前后使用不同 Session)
关联:Filter案例-登录验证的实现 / Response完成重定向 / MVC模式