【发布时间】:2010-08-10 13:46:02
【问题描述】:
我们有一个在 IE7/8 和 Firefox 中运行良好的 tomcat 应用程序。我们唯一遇到问题的浏览器(我们现在关心的)是谷歌浏览器。用户可以很好地导航到应用程序并登录并在 Firefox 和 IE 中做任何他们需要做的事情。但是,当尝试使用 Chrome 登录时,会话显然会在登录后立即丢失,并且当经过身份验证的用户尝试导航到另一个页面时,他们会被撞回登录页面。这种情况始终如一。
我在这里和其他地方看到其他条目表明上下文路径可能是罪魁祸首。我尝试设置 ProxyReverseCookiePath 但这并不能解决问题。
我们的虚拟主机配置如下:
<VirtualHost xxx.xxx.xxx.xxx:80>
ServerAdmin admin@email.com
ServerName subdomain.example.com
DocumentRoot /var/www
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass /context/ ajp://127.0.0.1:8009/context/
ProxyPass / ajp://127.0.0.1:8009/context/
#ProxyPassReverse /context/ http://127.0.0.1:8009/context/
#ProxyPassReverse / http://127.0.0.1:8009/context/
#ProxyPassReverseCookiePath /context/ /
</VirtualHost>
在 ROOT 上下文的同一 tomcat 实例上部署了另一个应用程序。我查看了在 cookie 中设置的 JSESSIONID,该 JSESSIONID 被发送回 Chrome,并且在每次请求时都会更改,而 IE 和 Firefox 则不会。
我在这里不知所措。欢迎任何想法!
我们正在使用 tomcat 6.0.23 以及 apache 2.2.14
【问题讨论】:
-
我在 Tomcat 5.5 和 Chrome 9.0.597.84 上遇到了同样的问题(Chrome 8 的效果相同)。你用的是什么版本?
-
我很抱歉没有意识到有回应。不确定它是否仍然相关:我不知道我当时使用的是哪个版本的 Chrome。 tomcat 是 6.0.23 和 apache 2.2.14
-
@basZero:事实证明,如果浏览器认为上下文路径不匹配,浏览器不会总是将 cookie 发送到服务器,或者服务器会丢弃它。这应该可以解决问题。它对我有用: ProxyPass /context ajp://127.0.0.1:8009/context/ ProxyPassReverse /context/ 127.0.0.1:2000/context ProxyPass / ajp://127.0.0.1:8009/context/ ProxyPassReverse / 127.0.0.1:2000/context ProxyPassReverseCookiePath /context /最后一行确保cookie中写入的路径是正确的。
标签: session google-chrome apache2 cookies tomcat6