Session是一种记录浏览器状态的机制。
session的生命周期:
创建:
1,第一次打开浏览器,访问服务器成功,由服务器在服务器端创建。
session对象存储在浏览器端,将id号响应到浏览器中。
2,客户端sessionId号存在,但服务器端session会话销毁,当再次发起请求时服务器就会再次创建session对象。
3.服务器关闭,但缓存(序列化),当服务器重启时,反序列化session。
设置session对象的非活动时间:
/* Servlet设置session的非活动时间以秒为单位 */
session.setMaxInactiveInterval(5);
<!-- 配置文件web.xml 设置session非活动时间,以分钟为单位 -->
<session-config>
<session-timeout>10</session-timeout>
</session-config>
销毁:
错误源:会话结束,浏览器关闭,session对象不会销毁。因为sessioin对象存储在服务器中,浏览器关闭,服务器并不知道。浏览器关闭本地sessionID号销毁,再次打开浏览器请求,就是一次全新的请求,服务器会生成新的session对象。
- 1,当session长时间(默认30分钟)不被使用时,session对象会被服务器销毁,再将当前的session对象发送个服务器,服务器其实已经将与之对应的session对象销毁,就没有与之对应的sesssionId,就会重新创建一个对象。
- 2,服务器关闭session会话销毁。但是服务器tomcat会在关闭时,将session对象序列化缓存session对象。生成SESSIONS.ser文件,在启动服务器时再读取回来,SESSIONS.ser文件消失。SESSIONS.ser文件本机(eclipse)位置:D:\Program Files (x86)\apache-tomcat-9.0.33\work\Catalina\localhost\JavaEE\org可以通过配置让服务器不缓存服务器对象。在Server文件夹中的context.xml将下面注释放开
<!-- 禁止序列化,持久化,session对象缓存 -->
<Manager pathname="" />
当服务器关闭时间超过最大时间时,直接销毁。同理,客户端有ID,而服务器已经销毁。
- 3,安全退出时,强制销毁session会话。
session.invalidate()