因为,项目中要使用HttpSessionListener监听session的销毁事件,因此,今天作了几个实验验证HttpSessionListener的sessionCreated和sessionDestroyed方法的行为方式,1,配置了session listener并正常工作。
2,在一个简单的jsp文件里面加入<%session.setMaxInactiveInternal(60*1)%>,即设置最大的不活动时间为1分钟,调用这个jsp的时候,等待一分钟,然后再关闭浏览器,此时,过了好大一会,destroyed方法才调用到,不知道其中的事件处理是怎样的一个过程。
3。在上面,如果,我设置的时间时60*200,即200分钟,然后启动后,等待,等很长时间都没有看到destroyed方法的调用?why??那位达人解析一下?不胜感谢。

解决方案 »

  1.   

    setMaxInactiveInternal为一分钟,并不意味Web服务器在一分钟之后就一定销毁这个会话,因为Web服务器一般都是采用定时器的方式, 每过若干分钟才扫描一次过时的会话,所以可能会3~4分钟,甚至更长时间才触发。200分钟要3小时半小时啊,你确定你等待超过了3个半小时?
      

  2.   

    web服务器是在一定条件下才销毁session的,
    时间是必备的条件之一,但不是唯一的,所以不可能那么及时的.你可到网查下,有这样的资料的.
      

  3.   

    关闭浏览器也是使session实效的一个方法啊,我把session设置的足够长,
    通过关闭浏览器,并没有看到sessionlitender的destroy方法调用?这是何故?
      

  4.   

    很好理解
    1.服务器每隔xxx长时间检查当前应该销毁的session
    2.每个session隔yyy长时间不操作就处于"可被销毁"的状态那么一个session在不操作yyy长时间后,此时服务器刚好检查到这个session了那它立刻被清除了,如果一个session在不操作yyy长时间后此时服务器刚好休息了,那就需要等xxx长时间后才回被清楚差不多就这个意思
      

  5.   

    通过关闭浏览器,并没有看到sessionlitender的destroy方法调用?这是何故?------------------
    错误!关闭浏览器并不会触发Session的销毁,因为服务器根本不知道你浏览器关闭的事件(除非你在body上有onunload事件,并且在此事件的响应函数中想办法通知服务器)所以你关闭浏览器不影响会话超时!
      

  6.   

    楼上正解.
    给你个参考
    判断session是否过期:
    http://blog.csdn.net/lcllcl987/archive/2005/02/25/301260.aspx