Servlet + mod-重写:HttpSession.getAttribute() returns null

Servlet + mod-rewrite: HttpSession.getAttribute() returns null

我在 Tomcat 上有一个 Servlet + JSP 应用 运行。我使用 mod-ajp 使用这些重写规则在 Tomcat 上重定向 apache:

RewriteRule ^/myapp/(.+) ajp://localhost:8009/myapp/ [P]
RewriteRule /myapp/(.+) ajp://localhost:8009/myapp/ [P]

这对会话很好,但是,当我改用这些重写规则时:

RewriteRule ^/subdir1/subdir2/subdir3/myapp/(.+) ajp://localhost:8009/myapp/ [P]
RewriteRule /subdir1/subdir2/subdir3/myapp/(.+) ajp://localhost:8009/myapp/ [P]

HttpSession.getAttribute("nameOfMyAttribute") returns 空。我看起来会话是 "binded" 到某种通过重写规则更改的主目录。是否可以强制会话忽略子目录?我是不是遗漏了什么?

Tomcat 会将 JSESSIONID cookie 的路径设置为您的应用程序的路径。在你的例子中,cookie 的路径是 /myapp。 Web 浏览器将忽略 URL 上的此 cookie,例如 /subdir1,因为它与 cookie 的路径不匹配。

以下是一些更改 cookie 路径以解决此类问题的示例:How to properly set JSESSIONID cookie path behind reverse proxy