Tomcat 6:实例之间的最大会话空闲时间不同

时间:2011-10-25 20:27:21

标签: java http session tomcat

我在Tomcat 6中使用HttpSession。我部署了我的Web应用程序的第一个Tomcat 6实例具有我期望的Tomcat会话行为(我在会话中将maxInactiveInteval设置为30分钟)。

  

更新:我在下面添加了更多代码,以准确演示我如何在会话中设置此超时

这是我首次设置会话的方式:

session = request.getSession(true);
session.setAttribute(USER_CREDENTIALS, new Credentials(username, password));
session.setMaxInactiveInterval(60*30);

然后我有一个拦截器来检查这个会话:

HttpSession session = request.getSession(true);
Credentials cred = (Credentials) session.getAttribute(AuthController.USER_CREDENTIALS);

似乎在我开发的Tomcat实例中工作正常,但在Tomcat 6的另一个实例中,在负载平衡环境中,maxInactiveInteval似乎不受尊重。

  

更新:我的意思是,如果用户处于非活动状态(没有新请求)大约十秒钟,则用户会话将过期。

代码中没有其他地方设置了maxInactiveInteval。可能导致这种行为的原因是什么?

1 个答案:

答案 0 :(得分:2)

根据对该问题的评论,您的具体问题是负载均衡的Tomcat实例几乎立即使会话到期。设置/更改<session-timeout>setMaxInactiveInterval()根本没有帮助。

首先,您需要使用Firebug和/或Fiddler跟踪Cookie流量,从而排除客户端的疑虑。如果cookie流量看起来很好(即客户端在所有后续请求中返回正确的会话cookie),则负载均衡器或Tomcat配置会中断。这不是编程错误,而是服务器管理员的食物。