现在的位置: 首页 > 综合 > 正文

Session 生命周期

2014年01月29日 ⁄ 综合 ⁄ 共 1298字 ⁄ 字号 评论关闭

        Session 字面含义会话,代表了客户端与服务端的“会话”Session的作用时间从用户第一次到达某个特定的Web页开始,到该用户离开Web站点,或在程序中利用代码终止某个Session

网上有一种说法:关闭浏览器Session会自动销毁,这种说法是错误的。Session的销毁只有两种情况:第一
调用了 session.invalidate()方法;第二 Session过期。其中Session的生命周期时间可以在web.xml配置,默认为30分钟,在web.xml配置:
<session-config>
  	<session-timeout>20</session-timeout>
</session-config>

         Java中可使用如下方式监听Session的创建和销毁:

   /**
     * 实现HttpSessionListener接口监听 监听session的创建事件
     */
    @Override
    public void sessionCreated(HttpSessionEvent se)
    {
        String sessionId = se.getSession().getId();
        log.info("创建session sessionId= " + sessionId);
    }

    /**
     * 实现HttpSessionListener接口监听 监听session的销毁事件
     */
    @Override
    public void sessionDestroyed(HttpSessionEvent se)
    {
        String sessionId = se.getSession().getId();
        log.info("销毁session sessionId= " + sessionId);
    }

         实际上服务端每次为客户端的一次会话建立的Session都含有一个SessionId,每次客户端向服务端发送请求时,都会将此SessionId携带过去,服务端会对此SessionId进行校验。当直接关闭浏览器时,这个SessionId依旧是存在与服务端,只不过再也没有客户端会携带它然后交予服务端校验。此SessionId已经失去了它存在的价值,会等待Session过期或者程序强制销毁,然后结束自己的年华。

如何在关闭浏览器时调用Session的invalidate()方法,进而可以使用sessionDestroyed()方法来监听Session被销毁的操作。此处提供一种思路,当然这个是有应用局限性的,可以借助于jQuery unload事件。

当用户离开页面时,会发生 unload 事件。

具体来说,当发生以下情况时,会发出 unload 事件:

  • 点击某个离开页面的链接
  • 在地址栏中键入了新的 URL
  • 使用前进或后退按钮
  • 关闭浏览器
  • 重新加载页面

在unload事件中绑定业务方法,如 

$(window).unload(function() {
	 $("#userClose").attr("action", "close.do").submit();
    });

 

然后在close.do中调用this.getSession().invalidate()即可在每次关闭浏览器的时候销毁当前session。

抱歉!评论已关闭.