Chrome和JSESSIONID

时间:2012-01-16 13:20:49

标签: google-chrome grails tomcat7 jsessionid

以下问题与Chrome ...:

我在服务器上运行Grails 1.3.7应用程序。我注意到,当我从Chrome请求静态内容(例如非动态html文件)时,Chrome会创建两个JSESSIONID-Cookies。登录窗口显示时的第一个,以及成功登录后的第二个。如果我想刷新页面或请求其他资源,我将再次登录。 (我认为因为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-server上的一个简短监视显示了大量的活动会话 - 来自chrome ...

更新2:

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

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

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

解决方案:

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

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

此错误仅涉及谷歌Chrome,在FF和IE中它没有任何问题。

1 个答案:

答案 0 :(得分:6)

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