Session的创建和销毁

session什么时候被创建

一个常见的错误是以为 session 在有客户端访问时就被创建,然而事实是直到某 server 端程序(如 Servlet )调用

HttpServletRequest.getSession(true)  //false 不会自动创建Session 
这样的语句时才会被创建。 所以没有调用getSession方法则不会创建session

要了解Session首先要知道一个概念:Session的销毁只有两种情况:

第一:session调用了 session.invalidate()方法。
第二:前后两次请求超出了session指定的生命周期时间。

其中Session的生命周期时间可以在web.xml配置。默认30分钟 在web.xml可以做如下配置:
<session-config>
      <session-timeout>5</session-timeout>
</session-config>

     如何来证明关闭浏览器的时候Session没有销毁呢?  我们可以创建一个SessionListener 此监听器专门用来监听Session的生命周期的.代码如下:


// 新建一个session时触发此操作  
    public void sessionCreated(HttpSessionEvent se) {   
        System.out.println(se.getSession().getId());  
    }  
  
    // 销毁一个session时触发此操作  
    public void sessionDestroyed(HttpSessionEvent se) {  
       System.out.println(se.getSession().getId()); 
    }  


   别忘记在web.xml中配置监听器, 配置完毕后 可以做个测试。 当浏览器关闭后此监听器的 sessionDestroyed方法并没有执行,而是在5分钟左右(个人电脑没有那么精确) 才会触发sessionDestroyed ,当然 再打开浏览器的时候 sessionCreated 会自动调用 关闭5分钟后sessionDestroyed 又会自动调用, 通过getID方法大家可以判断是否为同一个Session. 所以网上说明的关闭浏览器Session就消失.其实并不正确。如果没有任何配置的情况下. 关闭浏览器30分钟后Session才会消失的。
   我们可以利用这个概念做什么呢? 最典型的就是利用 SessionListener  的sessionDestroyed方法 来记录用户非正常退出的时间. 用户在访问某个网站的时候(目前的银行网站都有此功能) 显示了用户的最后登录时间. 此时间如何获取. 在这里分两种情况
   如果用户按"退出" 按钮那就好说了. 跳转到action中.记录下用户退出的时间. 存储到持久层中。
   如果用户非正常退出, 在没有配置Session的情况下 默认会在30分钟后调用sessionDestroyed 那么我们同样可以在此获取用户退出的时间,在sessionDestroyed 调用业务逻辑完成我们想要实现的功能。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值