【发布时间】: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