【问题标题】:Session Management in TomcatTomcat 中的会话管理
【发布时间】:2009-12-15 13:38:53
【问题描述】:

我开发了一个带有 2 个 servlet A 和 B 的简单网络应用程序。

我对 Tomcat 对 web 应用的会话管理有一些疑问。

注意 - 我在访问网络应用程序时禁用了网络浏览器 (Chrome) 中的 cookie。

1.) 当第一次点击 web 应用程序时,Servlet A 被调用。 Servlet A 从请求中访问会话,并对会话哈希码进行简单的系统输出。然后它执行 sendRedirect 到 servlet B。

[据我了解,由于这是第一次请求,Tomcat 会向浏览器发送一个包含新会话 ID 的 cookie。但是,由于我们没有使用 HttpResponse.encodeRedirectURL()“编码”重定向 URL,重定向 URL 将不包含附加到它的会话 ID。如果我在这里错了,请纠正我。]

2.) 由于 cookie 在我的浏览器中被禁用,它会忽略在 cookie 中发回的会话 ID,并向重定向 URL 发出新请求(也没有附加会话 ID)。

3.) 新请求导致 servlet B 被调用,它也访问请求会话并对会话哈希码进行 sysout。

让我感到困惑的是,Servlet A 和 B 都输出相同的会话哈希码,这意味着它们从两个请求中获得了相同的会话。

即使没有发送会话 ID,来自浏览器的第二个请求如何映射到与之前相同的会话?

谢谢!

【问题讨论】:

    标签: session tomcat jakarta-ee


    【解决方案1】:

    在请求之间传递会话只有两种方式:Cookie 和 URL 重写。如果您在 URL 中看不到会话 ID,则它一定是 cookie。

    您确定 cookie 已禁用吗?从 HTTP 标头跟踪中应该很容易看到。

    【讨论】:

      【解决方案2】:

      您确定您已禁用“内存中”cookie 吗?浏览器通常会让您禁用保存到磁盘的持久性 cookie,但它们仍然允许仅在浏览器会话期间驻留的内存中的瞬态 cookie。

      我推荐Wireshark 来分析HTTP 流。这样您就可以看到浏览器发送和接收的 cookie。

      【讨论】:

        【解决方案3】:

        这很奇怪。

        当我昨天测试该应用程序时,它表现出与我所描述的类似的行为。但是,当我现在测试该应用程序时,它的表现非常完美,正如我所期望的那样。

        原因可能是我在禁用 cookie 后没有重新启动浏览器会话。

        如果我再次遇到同样的行为,会通知你们。

        感谢您的宝贵时间!

        【讨论】:

          猜你喜欢
          • 2017-05-21
          • 2018-12-27
          • 2012-01-30
          • 1970-01-01
          • 2014-08-24
          • 2013-04-03
          • 2023-03-22
          • 2012-11-01
          • 1970-01-01
          相关资源
          最近更新 更多