【问题标题】:Chrome and JSESSIONIDChrome 和 JSESSIONID
【发布时间】:2012-02-11 10:17:07
【问题描述】:

chrome 出现以下问题...:

我在服务器上运行 Grails 1.3.7 应用程序。我注意到,当我从 Chrome 请求静态内容(例如非动态 html 文件)时,Chrome 会创建两个 JSESSIONID-Cookie。登录窗口出现时的第一个,成功登录后的第二个。如果我想刷新页面,或者请求其他资源,我必须重新登录。 (我认为是因为 Tomcat 不理解这两个 cookie)

我已经用 FF 尝试过,但 FF 只是创建了一个 Cookie 并且它工作得很好。 另外,我已经在本地运行了该应用程序,它甚至可以完美地与 chrome 一起使用。所以,tomecat 一定有问题。

环境:

  • Grails-Application 1.3.7(带有 Spring-Security-Core 1.2.4)
  • Apache Tomcat 7(在 Windows Server 2008 上)

我的 httpd.conf:

ProxyPass /manager http://myUrl:8080/manager
ProxyPass /myGrailsApp http://myUrl:8080/myGrailsApp
ProxyPassReverse /manager http://myUrl:8080/manager
ProxyPassReverse /myGrailsApp http://myUrl:8080/myGrailsApp

ProxyPass / http://myUrl:8080/myGrailsApp/frontend
ProxyPassReverse / http://myUrl:8080/myGrailsApp/frontend

提前致谢。

更新 1:

我重新构建、重新部署了应用程序并再次重新启动了 tomcat。

现在我注意到:Chrome 不再生成两个 cookie。但错误是一样的。每次我刷新或请求某些内容时,JSESSIONID 都会更改,我必须重新登录。

在 tomcat 服务器上短暂观察会显示大量活动会话 - 来自 chrome 的...

更新 2:

我在服务器本地试了一下(用chrome):

  • localhost/myApp/frontend => Apache => 失败
  • localhost:8080/myApp/frontend => Tomcat => OK

似乎 Apache 是问题所在(?)。

解决方案:

我知道了:) Grails *.gsp 模板总是在 每个 请求中请求“favicon.ico”。 静态内容(如 html 文件)上出现错误的原因是我们从 Grails-Application 重定向到这些资源。

所以我把 favicon.ico 放在了正确的位置,现在它可以工作了 :)

这个错误只涉及谷歌浏览器,在 FF 和 IE 中它没有任何问题。

【问题讨论】:

  • 您的问题和解决方案实际上帮助了一群跨国企业开发人员和工程师解决了一个已经发生数月的生产问题。谢谢。

标签: google-chrome grails tomcat7 jsessionid


【解决方案1】:

我也遇到了这个问题。我花了一段时间才弄清楚发生了什么(包括用 Wireshark 嗅探),还有更多时间找到可行的解决方案。 终于找到了这个帖子https://vaadin.com/forum/-/message_boards/view_message/1216366

这似乎是 Chrome/Safari(Webkit 浏览器?)以及它们处理重定向 cookie 的方式的问题。 简单的解决方法是将 context.xml 添加到我的 spring 项目中的 META-INF 目录中,其中包含

<?xml version='1.0' encoding='utf-8'?>
<Context sessionCookiePathUsesTrailingSlash='false'>
</Context>

然后重新部署新的war文件。现在一切都按预期进行。

【讨论】:

  • 但我不得不承认,它在我发布后不久就突然停止了对我的工作。像 tis 这样的接缝是修复的一部分,另一部分是用 ProxyPass 和 ProxyPassReverse 替换 Jkmount。由于我进行了这些更改,因此效果非常好
  • 是的,我也认为有几个步骤可以获得一个好的和干净的解决方案。我的修复不如你的修复干净:P
  • 这解决了我遇到的用户请求“/myapp”的问题,Shiro 会将他们重定向到“/myapp/login”,然后成功登录将重定向到原始请求(“/myapp ”)。问题是在初始请求中设置的 cookie 具有 path="/myapp/" (带有斜杠),并且 Webkit 不会在重定向时使用 cookie,因此用户将被再次发送回登录页面.非常感谢您的解决方案!
猜你喜欢
  • 1970-01-01
  • 2014-11-16
  • 2014-05-11
  • 2014-02-08
  • 2017-10-20
  • 2017-06-23
  • 2021-01-29
  • 2019-11-27
  • 1970-01-01
相关资源
最近更新 更多