Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java web应用程序中HttpSession中的奇怪行为_Java_Session_Web Applications_Servlets - Fatal编程技术网

Java web应用程序中HttpSession中的奇怪行为

Java web应用程序中HttpSession中的奇怪行为,java,session,web-applications,servlets,Java,Session,Web Applications,Servlets,我有一个web应用程序,它使用HTTP会话跟踪用户状态。我正在尝试调试一个错误,我必须将会话超时设置为2分钟。我将web.xml->会话超时修改为2。通过向自定义HTTP会话侦听器添加日志语句,我可以看到,当我不登录应用程序时,会话在2分钟后被创建和销毁。在我登录后,会话在创建后大约20分钟内被销毁。我还尝试关闭浏览器以避免任何延长会话生命周期的AJAX调用,但我仍然看到相同的行为。应用程序中似乎有其他东西在延长会话生命周期,原因可能是什么?从何处开始查找以解决此问题?验证您的登录servlet

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

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

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分钟”现象的原因。

看看他的答案和来源。