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