6

铬的以下问题...:

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

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

环境:

  • 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-server 上短暂观察会显示大量活动会话 - 来自 chrome 的那些......

更新 2:

我在服务器上本地尝试过(使用chrome):

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

似乎Apache是​​问题(?)。

解决方案:

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

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

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

4

1 回答 1

7

我也遇到了这个问题。我花了一段时间才弄清楚发生了什么(包括用 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文件。现在一切都按预期工作。

于 2012-03-20T11:31:09.030 回答