我有一个在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会在这种情况下表现得无动于衷?
答案 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