【发布时间】:2011-12-15 06:39:32
【问题描述】:
我在 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。什么可能导致这种行为?
【问题讨论】:
-
您的问题令人困惑。
setMaxInactiveInterval()并没有做你认为它做的事情。它与<session-timeout>基本上完全相同,只是它允许在每个会话的基础上更改它,因此您在那里设置完全相同的值的那一行是完全多余的。您看到并试图解决的问题到底是什么? -
@BalusC 指出,我在想
是会话过期前的时间(以分钟为单位),但它似乎是允许会话在其之前的请求之间空闲的时间已失效。 -
是的,没错。我看到您已经编辑了您的问题以消除这种混淆。但我仍然不明白你的具体问题。 确切地是什么意思“似乎没有受到尊重”?您何时/何地设置此值以及会发生什么?
-
@BalusC 酷,我刚刚更新了。
-
好的,负载均衡器或 Tomcat 配置已损坏。这是服务器管理员的食物。或者是否有其他 web 应用程序在同一环境中运行良好?