日期:2014-05-20  浏览次数:20786 次

紧急求助:HttpSessionListener监听session销毁的问题
因为,项目中要使用HttpSessionListener监听session的销毁事件,因此,今天作了几个实验验证HttpSessionListener的sessionCreated和sessionDestroyed方法的行为方式,

1,配置了session   listener并正常工作。
2,在一个简单的jsp文件里面加入 <%session.setMaxInactiveInternal(60*1)%> ,即设置最大的不活动时间为1分钟,调用这个jsp的时候,等待一分钟,然后再关闭浏览器,此时,过了好大一会,destroyed方法才调用到,不知道其中的事件处理是怎样的一个过程。
3。在上面,如果,我设置的时间时60*200,即200分钟,然后启动后,等待,等很长时间都没有看到destroyed方法的调用?why??

那位达人解析一下?不胜感谢。

------解决方案--------------------
setMaxInactiveInternal为一分钟,并不意味Web服务器在一分钟之后就一定销毁这个会话,因为Web服务器一般都是采用定时器的方式, 每过若干分钟才扫描一次过时的会话,所以可能会3~4分钟,甚至更长时间才触发。


200分钟要3小时半小时啊,你确定你等待超过了3个半小时?
------解决方案--------------------
web服务器是在一定条件下才销毁session的,
时间是必备的条件之一,但不是唯一的,所以不可能那么及时的.

你可到网查下,有这样的资料的.
------解决方案--------------------
很好理解
1.服务器每隔xxx长时间检查当前应该销毁的session
2.每个session隔yyy长时间不操作就处于 "可被销毁 "的状态

那么一个session在不操作yyy长时间后,此时服务器刚好检查到这个session了那它立刻被清除了,如果一个session在不操作yyy长时间后此时服务器刚好休息了,那就需要等xxx长时间后才回被清楚

差不多就这个意思
------解决方案--------------------
楼上正解.
给你个参考
判断session是否过期:
http://blog.csdn.net/lcllcl987/archive/2005/02/25/301260.aspx