Session的创建与销毁时机

  • 客户端第一次访问jsp文件,jsp被翻译成Servlet时会自动创建Session,此后客户端再次访问就会带着JSESSIONID过来。
  • 当客户端重启浏览器时,客户端的JSESSIONID被销毁(此时服务端的Session没有受影响),客户端再次访问浏览器没有带着JSESSIONID,服务端将再次为客户创建Session。
  • 在jsp文件page指令里设置session="false",客户端访问此jsp将不会创建Session。
  • 客户端访问Servlet时不会创建Session,只有在通过request.getSession()或是跳转到jsp文件时才创建Session。

tomcat默认session超时时间为30分钟,可以根据需要修改,负数或0为不限制session失效时间。这里要注意这个session设置的时间是根据服务器来计算的,而不是客户端。所以如果在调试程序,应该是修改服务器端时间来测试,而不是客户端。

<session-config>
<session-timeout>30</session-timeout>
</session-config>

通过Java代码设置

session.setMaxInactiveInterval(30*60); // 以秒为单位,即在没有活动30分钟后,session将失效

服务器端调用了HttpSession的invalidate()方法。

退出销毁session的Action方法
  /**
     * 用户退出的方法
     */
    public String quit(){
        // 销毁session
        ServletActionContext.getRequest().getSession().invalidate();
        return "quit";
    }

注意!如果服务器正常关闭不会销毁

服务器正常关闭不销毁session,()session会存到我们的硬盘中,也就是我们正常的点击stop server()会在tomcat的work的Catalina\localhost\项目名称下面生成一个文件SESSIONS(执行序列化),当服务器再次启动的时候会加载此文件(反序列化),倘若没有实现序列化接口(Serializable)可能会报错因为序列化和反序列化会依据一个id:

private static final long serialVersionUID = 1L;

猜你喜欢

转载自www.cnblogs.com/aikf/p/10117925.html