请教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页面就可以。
我不明白你到底要做什么
------解决方案--------------------
------解决方案--------------------MaxInactiveInterval是最大不活动时间,每接受一次请求就重新起算,直到不活动时间到达销毁session,或超过session的timeout值自动被销毁
------解决方案--------------------用一个监视器监视session
在生成的时候启动一个定时器
定时器到时间清除该session
------解决方案--------------------嗯,好像的确是会刷新时间的。无论你是否getSession了,是我错了。
你的需求可能得用另外的方法做,你可以在Session中记录上一次有效的访问的访问时间LastValidAccessTime
然后配置一个Filter,在请求开始时先校验它是否存在,如果已经存在并且距离现在已经超出指定的时,调用session.invalidate() 另会话失效