我在战争的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>
答案 0 :(得分:1)
好的,可以看一些事情:
由于您使用的是Load Balancer,它建议您使用多个Java服务器(应用服务器或servlet容器) - 您应该确保正确配置了会话共享(群集)机制。此外,您的后端服务器可能还需要您将<distributable />
标记添加到您的web.xml。 (这种方法的缺点是,除非绝对必要,否则不建议在多个后端服务器之间共享会话。
@ piet.t提到的使用群集/会话共享的另一种选择是确保在您的负载均衡器上启用会话粘性 - 这将确保使用相同会话的请求始终返回到同一台服务器(这种方法的缺点是,如果1台服务器死机,你可能会失去很多会话)
正如@JB Nizet在上面的评论中所建议的那样,你应该确保你的AJAX GET请求没有从浏览器缓存中返回 - 这有时通过向每个GET请求添加一个随机数来完成(例如,时间)以毫秒计)
答案 1 :(得分:0)
感谢大家的回复:) 我刚检查过,发现负载均衡器上的会话粘性时间是3分钟。这意味着即使会话处于活动状态,负载均衡器也可以在3分钟后将请求发送到任何服务器。
暂时我已经更改了js方法,稍后我将在负载均衡器上更新会话活动时间。
setInterval(function () {
$.get("sessionKeepAlive");
}, 240000);