当前位置:编程学习 > 网站相关 >>

Session 生命周期

 


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


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

<session-config>
   <session-timeout>20</session-timeout>
</session-config>
         Java中可使用如下方式监听Session的创建和销毁:
[java]
/**
  * 实现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); 
 } 

   /**
     * 实现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事件中绑定业务方法,如 [html] view plaincopyprint?$(window).unload(function() { 
     $("#userClose").attr("action", "close.do").submit(); 
    }); 

$(window).unload(function() {
  $("#userClose").attr("action", "close.do").submit();
    });
然后在close.do中调用session.invalidate()即可在每次关闭浏览器的时候销毁当前session。

 

补充:Web开发 , 其他 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,