在Safari中,后续POST和GET之间不会保持会话

时间:2014-01-13 20:05:21

标签: java session tomcat amazon-web-services safari

我有一个在Tomcat 7.0.27上运行的应用程序,它是我们的组织网络和在Amazon Web服务上运行的第二个应用程序(这只是Tomcat 7.0.42)。在amazon上运行的应用程序位于第一个应用程序的iframe内。在Amazon上运行的应用程序是自包含的,即它需要的所有文件都驻留在同一个tomcat容器内,并且不与第一个应用程序通信。我看到整个站点在FireFox和chrome中工作正常。但在野生动物园有问题。在Safari中,第二个应用程序的启动是成功的(这只是一个POST),但随后的请求(即GET)失败。所以在代码中我们正在做的是在POST之后我们将Java对象放在会话中,就像这样

SessionData result = new SessionData(request,oauthCredentials);
request.getSession().setAttribute(SESSION_ATTR_TC_DATA, result);

所以在POST之后第一个请求是GET,当这个请求进来时我们尝试获取我们放在会话中的Java对象,如下所示。

SessionData result = (SessionData) request.getSession().getAttribute(SESSION_ATTR_TC_DATA);
request.setAttribute(SESSION_ATTR_TC_DATA, result);

但在Safari中,我发现POST中的会话ID(JSESSIONID)与GET中的会话ID(JSESSIONID)不同,所以SessionData=null;我发现在FIREFOX / CHROME的情况下会话ID是相同的。

我从URL / IPAddress看到了

http://one.roses.flowers.org/ #IpAddress=141.21.19.87
http://test-dev.elasticbeanstalk.com/ #IpAddress=64.261.831.97

我不是通过编写代码来创建任何会话。 Tomcat正在处理它。

但是,当我们的组织网络内部运行第一个tomcat /第二个tomcat时,这个Whole Thing可以跨所有浏览器工作。我从URL / IPAddress看到了

http://one.roses.flowers.org/ #IpAddress=141.21.19.87
http://five.oranges.flowers.org/ #IpAddress=141.21.19.88

为什么Safari会在这种情况下表现得无动于衷?

1 个答案:

答案 0 :(得分:1)

在Safari中使用它的原因是关闭cookie限制以接受来自第三方。 IE也是如此。默认设置是不接受第三方cookie。对于FF / Chrome,默认选项是接受第三方Cookie。

我使用Webscarab工具来调试此问题。

iframe内部的应用程序位于AmazonWebservices上,URL模式与源站点完全不同。这使得浏览器认为这些调用是从某些外部站点进行的。因此,基于浏览器cookie设置,浏览器在iframe内部切断了应用程序。

此外,2 URL对浏览器来说是这样的。

http://one.roses.flowers.org/ 
http://test-dev.elasticbeanstalk.com/

我们在更高环境(QA / PROD)的AmazonWebservice(AWS)服务器上为项目添加了Alias / cname,如下所示。通过向URL浏览器添加别名,不要考虑来自第三方的URL,因为两者都具有相同的域名。现在解决方案独立于浏览器cookie设置。

http://test-dev.elasticbeanstalk.com/ ---> http://aws.newsite.flowers.org