【问题标题】:Invalidate a session使会话无效
【发布时间】:2011-01-17 12:38:48
【问题描述】:

我有一个基于 jsp servlet 的应用程序,会话时间超过 30 分钟,我想在有人故意或意外关闭浏览器窗口时立即使会话无效(操作系统关闭/从 tast manager 关闭/关机)

我可以对此进行检查并使会话无效吗?

【问题讨论】:

    标签: java session-timeout


    【解决方案1】:

    无法处理这种情况。

    有些浏览器会提供此设置作为他们的偏好,但您无法以编程方式处理此设置。

    最大:

    连接关闭后,您可以从页面(可能是标题)进行投票,与 gmail 中的 gtalk 相同。

    【讨论】:

    • @ororg.life.java - Jigar Joshi - 力求你
    • 后面的部分你可能已经在网络浏览器中使用了来自 gmail 的 google 聊天,因为你可能已经观察到当连接关闭时它显示 trying in. . . 我正在遵循该机制,在浏览器关闭或机器关闭时对服务器进行持续轮询,它将停止,您可以检测到现在是时候使会话无效了,否则您需要为此设计一个精心设计的 apttern会有民意调查的开销
    • 评论胜于回答:)
    • 您可以使用 DWR 或 jquery 在类似的解决方案中使用 look
    【解决方案2】:
    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. 1234563 .
    if ( (getcurrentTime() - session.getCreationTime()) > 2000 ) {
    }
    
    1. 页面渲染时,获取maxinactiveinterval,然后将值设置为JavaScript变量,然后使用setInterval函数,将inactiveinterval值传递给函数,一旦发生超时,您可以将cookie设置为过期。

    【讨论】:

    • 大多数浏览器不支持在beforeunloadunload 事件中发送ajax 请求,因此您当然不应该依赖它。只需让会话过期或缩短其生命周期并使用轮询使其保持活动状态。
    【解决方案3】:

    不,我不相信你能做到这一点,因为浏览器中没有可用的钩子来让它在关闭时发送断开连接通知(某种),我认为没有服务器端询问最近会话以测试其连接状态的机制。

    【讨论】:

      【解决方案4】:

      如果您使用的是 tomcat 5.0/5.5/6.0 容器,则 tomcat 会话管理器生成的用于跟踪会话的 cookie (JSESSIONID) 是 per-session cookie(仅浏览器内存 cookie)而不是持久性 cookie(写入磁盘)。这是因为会话管理器执行(硬编码)setMaxAge(-1),因此生成的 HTTP 响应包含: Set-Cookie: JSESSIONID=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX; Path=/,没有Expire=<i>date</i>

      因此,当浏览器关闭时(所有浏览器窗口,或仅包含 cookie 的窗口,取决于各种浏览器实现),cookie - 和会话 - 都会丢失。 [*]

      这与&lt;session-timeout&gt; 无关,这是一个告诉tomcat 服务器端 会话管理器在空闲 超过指定时间时使会话过期的设置.

      [*] 它们仍将保留在服务器端的磁盘上,直到会话超时到期,但不会有带有 cookie 的请求激活它们。

      【讨论】:

        猜你喜欢
        • 2017-01-30
        • 2011-01-24
        • 2017-07-29
        • 1970-01-01
        • 2019-08-13
        • 2018-08-05
        • 2011-04-29
        • 2014-07-04
        相关资源
        最近更新 更多