Web应用程序中HttpSession中的奇怪行为

时间:2013-06-28 10:08:10

标签: java session web-applications servlets

我有一个使用HTTP会话跟踪用户状态的Web应用程序。我试图调试一个错误,我必须将会话超时设置为2分钟。我修改了 web.xml - > session-timeout 到2.通过向自定义HTTP会话侦听器添加日志语句,我可以看到会话在2分钟后创建并销毁,此时我无法登录到应用程序。登录后,会话在创建后大约20分钟被销毁。我也尝试关闭浏览器以避免任何延长会话生命周期的AJAX调用,但我仍然看到相同的行为。看起来应用程序中的其他东西正在延长会话的生命周期,这可能是什么原因?从哪里开始寻找解决这个问题?

3 个答案:

答案 0 :(得分:0)

验证您的登录servlet,目标jsp或任何会话侦听器是否未以编程方式覆盖web.xml中设置的会话超时值。在您的代码库中搜索 setMaxInactiveInterval

session.setMaxInactiveInterval(20*60); // seconds

答案 1 :(得分:0)

首先检查代码,以编程方式设置会话时间,以便在登录时替换xml值。

打印getMaxInactiveInterval()代码的结尾。如果它不是您在web.xml中设置的,那意味着它在其他地方被更改。

检查代码中的setMaxInactiveInterval(int interval)。

HttpSession一直存在,直到它的使用时间超过了时间,你可以在web.xml中指定一个默认为30分钟的设置。因此,当客户端不再访问webapp超过30分钟时,servletcontainer将废弃会话。即使指定了cookie,每个后续请求也将无法访问同一会话。 servletcontainer将创建一个新的。

查看会话api了解更多详情

答案 2 :(得分:0)

如果20分钟不是一个确切的估计: 您是使用 request.getSession(); 还是 request.getSession(true); 在任何地方检索会话? 如果是,那么这可能是一个原因。

要避免它 request.getSession(false);可以帮助您停止延长会话生命周期。

您对“约20分钟”的近似可能与业务逻辑请求的生命周期有关,其中会话打开到db或其他一些处理。

正如其他答案所示,"setMaxInterval();"可能是奇怪的“20分钟”现象的原因。