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

时间:2015-02-09 18:50:09

标签: jsp servlets mod-rewrite httpsession mod-proxy-ajp

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

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

适用于会话,但是,当我使用这些重写规则时:

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

HttpSession.getAttribute(“nameOfMyAttribute”)返回null。我看起来会话被“绑定”到某种主目录,这是通过重写规则改变的。是否可以强制会话忽略子目录?我错过了什么吗?

1 个答案:

答案 0 :(得分:1)

Tomcat会将JSESSIONID cookie的路径设置为您应用的路径。在您的情况下,Cookie的路径为/myapp。 Web浏览器会在/subdir1之类的网址上忽略此Cookie,因为它与Cookie的路径不匹配。

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