【问题标题】:User session closed after 20 minutes用户会话在 20 分钟后关闭
【发布时间】:2014-10-21 06:06:02
【问题描述】:

我在我的战争的 web.xml 文件中配置了 20 分钟的会话超时。但是我正在调用我的 servlet 以使用此 JavaScript 代码在 20 分钟后保持会话处于活动状态:

setInterval(function () {
    $.get("sessionKeepAlive");
}, 240000);

在开发环境中一切正常,但在 QA 中却无法正常工作。我们在 QA 中使用负载均衡器。我想知道我们是否可以在服务器配置 cse 中更改任何内容来解决此问题。

web.xml:

<session-config>
    <session-timeout>10</session-timeout>
</session-config>

【问题讨论】:

  • 使用负载均衡器意味着您有多个应用服务器/servlet 容器。您是否在后端使用某种会话共享机制?你确定它配置正确吗?
  • 您使用的是什么网络服务器?是否有一些集群机制处于活动状态?负载均衡器上的会话粘性?
  • 另外,请确保 AJAX GET 请求不是直接从浏览器缓存中提供的。
  • 我认为 POST 不太可能被缓存在某处,并且无论如何考虑到语义似乎更合适。

标签: java session session-timeout


【解决方案1】:

好的,有很多东西要看:

  1. 由于您使用的是负载均衡器,因此建议您使用多个 Java 服务器(应用程序服务器或 servlet 容器) - 您应该确保正确配置了会话共享(集群)机制。此外,您的后端服务器可能要求您将&lt;distributable /&gt; 标签添加到您的 web.xml。 (这种方法的缺点是在多个后端服务器之间共享会话是不可取的,除非绝对必要)

  2. @piet.t 提到,使用集群/会话共享的另一种选择是确保在负载均衡器上启用会话粘性 - 这将确保使用同一会话的请求始终返回到同一台服务器。 (这种方法的缺点是,如果 1 台服务器死机,您可能会丢失大量会话)

  3. 1234563以毫秒为单位)

【讨论】:

    【解决方案2】:

    谢谢大家的回复:) 我刚刚检查并发现负载均衡器上的会话粘性时间为 3 分钟。这意味着负载均衡器可以在 3 分钟后将请求发送到任何服务器,即使会话处于活动状态。

    我暂时改了js方法,稍后我会更新负载均衡器上的会话活跃时间。

    setInterval(function () {
        $.get("sessionKeepAlive");
    }, 240000);
    

    【讨论】:

    • 如果这最终解决了问题,您应该将答案标记为“已接受”以帮助其他人。单击问题左上角的淡出复选标记将其变为绿色。
    猜你喜欢
    • 2011-04-30
    • 2015-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-17
    • 2010-10-16
    • 1970-01-01
    相关资源
    最近更新 更多