【问题标题】:Tomcat application creates new session on page reload when visited through apache通过 apache 访问时,Tomcat 应用程序在页面重新加载时创建新会话
【发布时间】: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


【解决方案1】:

供参考:通过将应用程序部署在根上下文路径并从代理语句中删除上下文路径来解决问题。

ProxyPass /context/ ajp://127.0.0.1:8009/
ProxyPass / ajp://127.0.0.1:8009/

不需要其他任何东西。

【讨论】:

    猜你喜欢
    • 2016-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多