使会话无效

时间:2011-01-17 12:38:49

标签: java session-timeout

我有一个基于jsp servlet的应用程序,会话时间超过30分钟,我想在一个人有意或无意地关闭浏览器窗口时(OS关闭/从tast manager / powerdown关闭)使会话无效

我可以检查一下并使会话无效吗?

4 个答案:

答案 0 :(得分:3)

无法处理此方案。

有些浏览器提供此设置作为首选项,但您无法以此方式处理此设置。

最高:

只要连接关闭该会话,您就可以通过gmail中的gtalk与页面进行轮询(可能是标题)。

答案 1 :(得分:1)

  1. 为什么要这样做,你已经在服务器中配置了会话应该保持空闲30分钟,之后它将在服务器中到期。

  2. 如果你想这样做,请使用以下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.
    
    });
    
  3. 您可以实现服务器推送ajax轮询,例如,认为会话将​​在另外2秒内到期,向客户端发送服务器端请求以使cookie无效,并且在服务器中也可以使会话无效

  4. if ( (getcurrentTime() - session.getCreationTime()) > 2000 ) {
    }
    
    1. 在呈现页面时,获取maxinactiveinterval,然后将值设置为JavaScript变量,然后使用setInterval函数,将inactiveinterval值传递给function,一旦超时发生,您可以将cookie设置为expire。

答案 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激活它们的请求。