Java web应用程序中HttpSession中的奇怪行为
我有一个web应用程序,它使用HTTP会话跟踪用户状态。我正在尝试调试一个错误,我必须将会话超时设置为2分钟。我将web.xml->会话超时修改为2。通过向自定义HTTP会话侦听器添加日志语句,我可以看到,当我不登录应用程序时,会话在2分钟后被创建和销毁。在我登录后,会话在创建后大约20分钟内被销毁。我还尝试关闭浏览器以避免任何延长会话生命周期的AJAX调用,但我仍然看到相同的行为。应用程序中似乎有其他东西在延长会话生命周期,原因可能是什么?从何处开始查找以解决此问题?验证您的登录servlet、目标jsp或任何会话侦听器没有以编程方式覆盖web.xml中设置的会话超时值。在代码库中搜索setMaxInactiveIntervalJava web应用程序中HttpSession中的奇怪行为,java,session,web-applications,servlets,Java,Session,Web Applications,Servlets,我有一个web应用程序,它使用HTTP会话跟踪用户状态。我正在尝试调试一个错误,我必须将会话超时设置为2分钟。我将web.xml->会话超时修改为2。通过向自定义HTTP会话侦听器添加日志语句,我可以看到,当我不登录应用程序时,会话在2分钟后被创建和销毁。在我登录后,会话在创建后大约20分钟内被销毁。我还尝试关闭浏览器以避免任何延长会话生命周期的AJAX调用,但我仍然看到相同的行为。应用程序中似乎有其他东西在延长会话生命周期,原因可能是什么?从何处开始查找以解决此问题?验证您的登录servlet
session.setMaxInactiveInterval(20*60); // seconds
首先,在代码中检查您是否以编程方式设置了会话时间,这将在您登录时替换xml值 打印代码末尾的getMaxInactiveInterval()。如果它不是您在web.xml中设置的,则意味着它在其他地方被更改 检查代码中的setMaxInactiveInterval(int interval) HttpSession将一直存在,直到其未被使用的时间超过该时间为止,您可以在web.xml中指定该设置,该设置默认为30分钟。因此,当客户端不再访问webapp超过30分钟时,servletcontainer将丢弃会话。即使指定了cookie,每个后续请求也将不再具有对同一会话的访问权限。servletcontainer将创建一个新容器
如果20分钟不是一个准确的估计时间,请查看会话以了解更多详细信息: 您是否使用
request.getSession()在任何地方检索会话
或request.getSession(true)代码>?
如果是,那么这可能是一个原因
并避免它request.getSession(false)代码>可以帮助您停止会话生存时间的延长
您对“大约20分钟”的估计可能与业务逻辑请求的生命周期有关,在该生命周期中,会话向db打开,或者其他一些处理
如其他答案所示,“setMaxInterval();”
可能是奇怪的“20分钟”现象的原因。看看他的答案和来源。