【问题标题】:Strange behavior in HttpSession in a web applicationWeb 应用程序中 HttpSession 的奇怪行为
【发布时间】:2013-06-28 10:08:10
【问题描述】:

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

【问题讨论】:

标签: java session web-applications servlets


【解决方案1】:

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

session.setMaxInactiveInterval(20*60); // seconds

【讨论】:

    【解决方案2】:

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

    打印 getMaxInactiveInterval() 结束代码。如果不是你在 web.xml 中设置的,那就意味着它在其他地方被改变了。

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

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

    查看会话api 了解更多详情

    【讨论】:

      【解决方案3】:

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

      为了避免这种情况, request.getSession(false); 可以帮助您停止会话生命周期的延长。

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

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

      【讨论】:

        猜你喜欢
        • 2016-11-02
        • 1970-01-01
        • 2023-03-03
        • 2020-02-03
        • 1970-01-01
        • 1970-01-01
        • 2018-05-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多