Java EE中的会话超时

4

在Java EE中,会话超时时间可以以哪些方式定义?我想要超越显而易见的方式,比如在web.xml中设置会话超时或HttpSession.setMaxInactiveInterval()。

我正在审核一个Java EE应用程序,但是我找不到任何与会话超时定义相关的内容。这个Web应用程序在Weblogic上运行。我认为由于没有会话超时定义,所以会话永远不会过期。

2个回答

4

如果您想知道Weblogic中会话如何超时,我可以在weblogic.xml中添加TimeoutSecs或检查代码中任何在注销时通过session.invalidate()终止会话的点。

顺便说一下,这不会是无限的。

在Weblogic上,如果没有指定值,web.xml中的默认值是使用weblogic.xml中的TimeoutSecs值,默认为3600秒即60分钟。(参见此处)


看到这句话时已经是漫长的一天结束,我还以为我要疯了。 :) - cwash

1

与Spring无关:

  • 通过response.setHeader("Set-Cookie", cookiestring);自己控制cookie。它的expires属性控制会话超时。这将覆盖任何servlet容器或web.xml默认值,但在Java代码中可以通过HttpSession#setMaxInactiveInterval()进行覆盖。

  • 在servlet容器级别配置默认值。例如,在Tomcat中,通过<manager>元素的maxInactiveInterval属性。这可以通过web.xml中的<session-timeout>和Java代码中的HttpSession#setMaxInactiveInterval()进行覆盖。


更新 根据评论和问题的更新:

如果没有指定,则将使用Servlet容器管理的默认超时时间。这通常是30分钟(对于Tomcat和克隆版本是正确的)。这样,会话将在客户端在会话中发送的最后一个请求后30分钟过期。此外,当客户端关闭并重新打开浏览器实例或清除cookie时,将创建一个新会话(旧会话将在默认的30分钟超时后过期)。


服务器超时时间与客户端超时时间不同。或者我没有理解问题的意思 :-) - Bozho
@Bozho:如果服务器上的会话超时了,那么客户端也无法访问同一会话,反之亦然。 - BalusC
我正在审核代码。我也检查了cookies,但它们没有“expires”属性。应用服务器使用的是Weblogic。 - Andreas Tasoulas
1
所以这个问题毕竟是一个掩盖着你正在苦苦挣扎的具体问题的幌子?为什么不直接发布关于问题的提问呢?至于“expires”属性,默认情况下会被省略(这意味着服务器端会话将按照服务器配置的默认时间(通常为30分钟)或客户端关闭/重新启动浏览器而过期)。 - BalusC
你说得对,我很抱歉一开始没有表达得足够清楚。我将编辑问题,以符合应有的表达方式。(我已经找到了解决方案,但最初陈述的方式可能存在错误假设,因此几乎不可能有人能提供我正在寻找的答案)。 - Andreas Tasoulas
好的,以后尽量更具体一些。 - BalusC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接