【问题标题】:Tomcat 6: Max Session Idle time different between instancesTomcat 6:实例之间的最大会话空闲时间不同
【发布时间】: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 应用程序在同一环境中运行良好?

标签: java http session tomcat


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-19
    • 2011-06-01
    • 2022-10-04
    • 2022-08-17
    • 1970-01-01
    • 1970-01-01
    • 2014-11-24
    • 2011-06-18
    相关资源
    最近更新 更多