用户会话在20分钟后关闭

时间:2014-10-21 06:06:02

标签: java session session-timeout

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

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

在Dev环境中,一切都运行良好,但在QA中,它无法正常工作。我们在QA中使用负载均衡器。我想知道在服务器配置cse中是否有任何可以改变的东西来解决这个问题。

的web.xml:

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

2 个答案:

答案 0 :(得分:1)

好的,可以看一些事情:

  1. 由于您使用的是Load Balancer,它建议您使用多个Java服务器(应用服务器或servlet容器) - 您应该确保正确配置了会话共享(群集)机制。此外,您的后端服务器可能还需要您将<distributable />标记添加到您的web.xml。 (这种方法的缺点是,除非绝对必要,否则不建议在多个后端服务器之间共享会话。

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

  3. 正如@JB Nizet在上面的评论中所建议的那样,你应该确保你的AJAX GET请求没有从浏览器缓存中返回 - 这有时通过向每个GET请求添加一个随机数来完成(例如,时间)以毫秒计)

答案 1 :(得分:0)

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

暂时我已经更改了js方法,稍后我将在负载均衡器上更新会话活动时间。

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