日期:2014-05-18  浏览次数:20795 次

请教session中 MaxInactiveInterval 的值在什么时候得到通知?
大家都知道session有个超时时间 
我的问题就是这个超时时间在什么时候被刷新 即 客户端向服务器请求期间的什么时间点?
我假想有下面两种可能:
1.是在服务器刚得到请求即立刻根据jsessionid获取到session并刷新超时时间 
2.当在程序中显式的调用getSession后才刷新超时时间

如果是2那就好办了.
但如果结果为1.那么 我怎样通过程序指定session不接收此次的超时时间刷新 注:这种情况 监听器似乎是没有作用的.

另外我用的是JBOSS 这个应该跟具体实现的服务器有关吧.

------解决方案--------------------
session死亡 发生在以下情况:
1.session的持有者(即客户端浏览器)在最大无活动等待时间(MaxInactiveInterval)内无任何响应或请求
2.session被调用invalidate()方法强制弊了
3.jsp服务器重起或发生中断(此时应该是所有session都当了)

是在服务器刚得到请求即立刻根据jsessionid获取到session并刷新超时时间

应该是这种情况


------解决方案--------------------
我觉得不是这样的,MaxInactiveInterval是最大不活动时间,应该是每接受一次请求就重新起算,直到不活动时间到达销毁session,或超过session的timeout值自动被销毁。
------解决方案--------------------
2.当在程序中显式的调用getSession后才刷新超时时间 


Web服务器只有在程序显式调用getSession()/getSession(true)时候才会刷新最近访问时间


如果你在你的jsp中声明了<%@ session="false" %>,而且页面中没有调用getSession方法,那么你的页面无论访问多少次,你最后还是会超时的
------解决方案--------------------
肯定是第二种情况的,只要你不尝试去getSession()/getSession(true)就肯定不会使得Session的最后访问时间刷新


只要访问JSP(没有声明session="false")的,则会自动刷新最后访问时间的。如果你想保持会话在IE没有关闭前都生效,只要定时刷新一个简单的JSP页面就可以。


我不明白你到底要做什么
------解决方案--------------------
探讨
ChDw 我知道你的意思了
我接受到前台ajax 请求时 自己用servlet直接返回 不走jsp页面 那么也就不用设置session=false
之前我都通过jsp页面 容器在构造jsp页面的时候 会自动取出session所以就刷新了
我的理解是对的吧?

------解决方案--------------------
MaxInactiveInterval是最大不活动时间,每接受一次请求就重新起算,直到不活动时间到达销毁session,或超过session的timeout值自动被销毁
------解决方案--------------------
用一个监视器监视session
在生成的时候启动一个定时器
定时器到时间清除该session

------解决方案--------------------
嗯,好像的确是会刷新时间的。无论你是否getSession了,是我错了。



你的需求可能得用另外的方法做,你可以在Session中记录上一次有效的访问的访问时间LastValidAccessTime

然后配置一个Filter,在请求开始时先校验它是否存在,如果已经存在并且距离现在已经超出指定的时,调用session.invalidate() 另会话失效