我有一个基于jsp servlet的应用程序,会话时间超过30分钟,我想在一个人有意或无意地关闭浏览器窗口时(OS关闭/从tast manager / powerdown关闭)使会话无效
我可以检查一下并使会话无效吗?
答案 0 :(得分:3)
无法处理此方案。
有些浏览器提供此设置作为首选项,但您无法以此方式处理此设置。
最高:
只要连接关闭该会话,您就可以通过gmail中的gtalk与页面进行轮询(可能是标题)。
答案 1 :(得分:1)
为什么要这样做,你已经在服务器中配置了会话应该保持空闲30分钟,之后它将在服务器中到期。
如果你想这样做,请使用以下javascript或jquery(更适合跨浏览器),当浏览关闭事件发生时,通过在jsp中运行以下代码发送ajax请求以使会话无效
(request.getSession(false).setMaxInactiveInteral(0);
)
来自javascript
<body onbeforeunload="doAjaxCall();">
(or)
jQuery(window).bind("beforeunload", function(){
// Do ajax request and dont wait for the response.
});
您可以实现服务器推送ajax轮询,例如,认为会话将在另外2秒内到期,向客户端发送服务器端请求以使cookie无效,并且在服务器中也可以使会话无效
if ( (getcurrentTime() - session.getCreationTime()) > 2000 ) { }
答案 2 :(得分:0)
不,我不相信你可以这样做,因为浏览器中没有可用的钩子让它在关闭时发送断开通知(某种类型)并且我认为没有服务器端询问最近会话以测试其连接状态的机制。
答案 3 :(得分:0)
如果您使用的是tomcat 5.0 / 5.5 / 6.0容器,则tomcat会话管理器生成的用于跟踪会话的cookie(JSESSIONID)是一个每会话cookie(仅限浏览器内存的cookie)而不是持久性cookie(写入磁盘) )。那是因为会话管理器执行(硬编码)setMaxAge(-1),因此生成的HTTP响应包含:
Set-Cookie: JSESSIONID=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX; Path=/
而没有Expire=date
。
因此,当浏览器关闭时(所有浏览器窗口,或仅包含cookie的窗口,取决于variuos浏览器实现),cookie和会话都将丢失。 [*]
这与<session-timeout>
无关,{{1}}是一个设置,告诉tomcat 服务器端会话管理器在空闲更长时间后使会话到期比指定的。
[*]它们仍然会在服务器端的磁盘上持久存在,直到会话超时到期,但不会有cookie激活它们的请求。