【问题标题】:JSP page and Servlet reporting different session IDsJSP 页面和 Servlet 报告不同的会话 ID
【发布时间】:2010-08-05 20:19:55
【问题描述】:

我在 JSP 页面中设置了一个带有一些数据的 bean,但是当我尝试访问该值时,在我的 servlet 中,我得到了一个空值。我在两个页面中都打印了会话 ID,并且得到了不同的值。有谁知道可能会发生什么?谢谢。

【问题讨论】:

  • 您是否在某些可能被执行的代码路径中的任何地方调用 session.invalidate()?

标签: java jsp session servlets


【解决方案1】:

我最好的猜测是您的会话在某处失效。如果您的代码中确实有 session.invalidate() 语句,请将断点放在那里并在调试模式下验证是否有任何被命中。

您还可以在您的项目中实施和设置HttpSessionListener。实现回调接口并将实现类添加到你的web.xml

<listener>
    <listener-class>com.xyz.AppSessionListener</listener-class>
</listener>

sessionDestroyed 方法中放置一个断点,看看它何时在调试模式下被命中。

【讨论】:

    【解决方案2】:

    我没有注意到您为此提出了一个新问题。此问题已在您的previous question 的 cmets 中得到解答。以下是相关性摘录:

    会话取决于域和上下文。如果 servlet 侦听与 JSP 不同的域和/或上下文的 URL,那么它确实会使用不同的会话。但是,您可以通过相应地配置 servletcontainer 让不同的上下文共享相同的会话(在 Tomcat 中,将&lt;Connector&gt;emptySessionPath 属性设置为true)。但是由于 HTTP 规范中的安全限制,您不能在不同域之间共享会话。

    另一个原因确实是您通过HttpSession#invalidate() 明确地使会话无效,但这太明显而无法在您的代码中发现。

    【讨论】:

      猜你喜欢
      • 2015-10-29
      • 2012-08-08
      • 1970-01-01
      • 2011-03-29
      • 1970-01-01
      • 2012-12-07
      • 2014-10-07
      • 2011-02-09
      • 2013-04-12
      相关资源
      最近更新 更多