0

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

4

3 回答 3

0

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

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

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

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

检查会话api以获取更多详细信息

于 2013-07-02T12:49:50.647 回答
0

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

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

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

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

于 2013-07-08T10:31:33.710 回答
0

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

session.setMaxInactiveInterval(20*60); // seconds
于 2013-07-01T22:15:56.833 回答