【问题标题】:Session timeout in Java EEJava EE 中的会话超时
【发布时间】:2011-02-10 14:14:11
【问题描述】:

在 Java EE 中可以通过哪些方式定义会话超时时间?我正在寻找超越显而易见的方法,例如在 web.xml 或 HttpSession.setMaxInactiveInterval() 中设置会话超时。

我目前正在审查 Java EE 应用程序,但找不到与会话超时定义相关的任何内容。 Web 应用程序位于 Weblogic 中。我假设由于没有会话超时定义,会话将永远不会过期。

【问题讨论】:

    标签: servlets jakarta-ee weblogic session-timeout


    【解决方案1】:

    当您正在寻找如何在 Weblogic 中使会话超时时,我可以添加

    TimeoutSecs 中的weblogic.xml 或检查代码中会话在注销时被session.invalidate() 终止的任何点。

    顺便说一句,它不会是无限的。

    在 Weblogic 上,web.xml 中的默认值(如果未指定值)是使用 weblogic.xml 中的 TimeoutSecs 值,即 defaults to 3600 secs 即 60 分钟

    【讨论】:

    • 在漫长的一天快结束时看到这一点,并以为我疯了。 :)
    【解决方案2】:

    与 Spring 无关:

    • 通过response.setHeader("Set-Cookie", cookiestring); 自己控制cookie。控制会话超时的是expires 属性。这会覆盖任何 servletcontainer 或 web.xml 默认值,但无论如何都可以在 Java 代码中被 HttpSession#setMaxInactiveInterval() 覆盖。

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


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

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

    【讨论】:

    • 服务器超时与客户端超时不同。或者我没有得到问题:-)
    • @Bozho:如果会话在服务器上超时,那么客户端将无法访问相同的会话,反之亦然。
    • 我正在审查代码。我也检查了 cookie,但它们没有“过期”属性。使用的应用服务器是Weblogic。
    • 所以这个问题毕竟是一个你正在努力解决的具体问题的门面?为什么不直接发布有关该问题的问题?至于expires 属性,默认省略(这意味着服务器端会话根据服务器配置的默认值(通常为 30 分钟)或客户端关闭/重新启动浏览器时到期)。
    • 你是对的,我很抱歉从一开始就不够具体。我将把问题编辑成它应该用什么样的措辞。 (我已经找到了问题的解决方案,但最初陈述的方式暗示了错误的假设,因此几乎不可能有人提供我正在寻找的答案)。
    猜你喜欢
    • 2013-11-09
    • 2010-09-13
    • 2015-12-14
    • 2011-07-22
    • 2019-03-06
    • 2018-07-05
    • 1970-01-01
    • 1970-01-01
    • 2018-09-27
    相关资源
    最近更新 更多