大家都知道session有个超时时间
我的问题就是这个超时时间在什么时候被刷新 即 客户端向服务器请求期间的什么时间点?
我假想有下面两种可能:
1.是在服务器刚得到请求即立刻根据jsessionid获取到session并刷新超时时间
2.当在程序中显式的调用getSession后才刷新超时时间如果是2那就好办了.
但如果结果为1.那么 我怎样通过程序指定session不接收此次的超时时间刷新 注:这种情况 监听器似乎是没有作用的.另外我用的是JBOSS 这个应该跟具体实现的服务器有关吧.
我的问题就是这个超时时间在什么时候被刷新 即 客户端向服务器请求期间的什么时间点?
我假想有下面两种可能:
1.是在服务器刚得到请求即立刻根据jsessionid获取到session并刷新超时时间
2.当在程序中显式的调用getSession后才刷新超时时间如果是2那就好办了.
但如果结果为1.那么 我怎样通过程序指定session不接收此次的超时时间刷新 注:这种情况 监听器似乎是没有作用的.另外我用的是JBOSS 这个应该跟具体实现的服务器有关吧.
1.session的持有者(即客户端浏览器)在最大无活动等待时间(MaxInactiveInterval)内无任何响应或请求
2.session被调用invalidate()方法强制弊了
3.jsp服务器重起或发生中断(此时应该是所有session都当了) 是在服务器刚得到请求即立刻根据jsessionid获取到session并刷新超时时间应该是这种情况
Web服务器只有在程序显式调用getSession()/getSession(true)时候才会刷新最近访问时间
如果你在你的jsp中声明了<%@ session="false" %>,而且页面中没有调用getSession方法,那么你的页面无论访问多少次,你最后还是会超时的
ChDw 认为是第二种情况
如果设置<%@ session="false" %> 也不getSession() 那么服务器应该根本就不会建立Session对象吧
现在关键问题是 已经建立Session了
我觉得还是 1的可能性大一点
现在我的问题还是没有回答啊
我的问题的主要内容其实是
在1情况下.
1.那么 我怎样通过程序指定session不接收此次的超时时间刷新有没有人能指点一下?
现在我就是想在 session判断有没有超时之前 就强行不修改session中的那个最后一次访问时间.
servlet api中没有提供这样的接口
我该怎么办?
只要访问JSP(没有声明session="false")的,则会自动刷新最后访问时间的。如果你想保持会话在IE没有关闭前都生效,只要定时刷新一个简单的JSP页面就可以。
我不明白你到底要做什么
如果是getSession()后才会刷新超时时间 那就好办
我想要做的 就是在客户端发送请求后 不让这次的交互 刷新超时时间.
说得更详细一点吧。就是用户在线的情况
前台通过ajax想后台发送请求 来刷新用户在线的情况 (我试图修改报头 cook jsession=.. 但失败了)
但是这样会照成用户只要不关浏览器 就永远在线的情况 所以我要让这次的交互不刷新session的超时时间
事情情况 好像是第一种 用户打开浏览器后只要不关闭浏览器就不会超时
我接受到前台ajax 请求时 自己用servlet直接返回 不走jsp页面 那么也就不用设置session=false
之前我都通过jsp页面 容器在构造jsp页面的时候 会自动取出session所以就刷新了
我的理解是对的吧?
你可以用getSession(false)来尝试获取Session,如果超时了则返回null,这个方法不会刷新最后访问时间不过你这样容易造成用户经常性会话超时吧,这样的设置好吗?
getSession(false);这样即使获取到了Session对象 也不刷新最后访问时间?
你刷新页面,就刷新session
在生成的时候启动一个定时器
定时器到时间清除该session
前台ajax不断地发消息,LastValidAccessTime不受影响吗?
既然是这样的,那就是说用LastValidAccessTime也不行。
请教楼主,最后是怎么做到的?