iframe跨域与session失效问题的解决办法
何为跨域跨域session/cookie?
也就是第三方session/cookie。第一方session/cookie指的是访客当前访问的网站给访客的浏览器设置的seesion /cookie, 会被存储在访客的计算机上。第三方session/cookie指的是当前访问的网站中会加载(嵌入)另外第三方的网站代码,例如促销广告,那么第三方网 站也会在访客的计算机上添加session/cookie,这种就是第三方session/cookie。
我的问题
在开发讯息在线产品(http://iap.pgia.net)测试各种浏览器的兼容性时,发现ie浏览器(v7\8)都无法登录(总是提示验证码不匹配错误),而其它浏览器无此问题(firefox、百度等)。因此可以断定这和浏览器脱不了干系。
初步分析:
细查发现,在使用ie浏览器(v7\8)访问时,服务器端日志中显示sessionid一直在变化,每次请求都会产生一个全新的sessionid.
显然这是导致无法登录的直接唯一原因,如果解决这个问题则可正常登录。
深入分析:
为什么在ie浏览器(v7\8)上会出现这种情况呢,百度了解后得知:
出于隐私安全的考虑,ie会丢失iframe中的cookie,ie6/ie7支持的p3p(platform for privacy preferences project (p3p) specification)协议默认阻止第三方无隐私安全声明的cookie,firefox、chrome 不存在此问题。
我们知道session 其实就是基于cookie的。客户端在第一次与服务器建立会话时,会分配给客户端一个随机的sessionid,并存于客户端cookie中,然后在之后的请求中,会带上这个cookie,如果在客户端找不到这样的cookie,那么服务器就会重新分配一个。
而我的应用结构恰恰如此,即内置一个iframe嵌入远程应用来实现的。
解决办法:
要解决这个问题就是要在请求时添加“p3p”协议。那么如何实现呢?
在框架页面加入如下代码:
<%
// 解决ie7\8跨域访问问题
response.setheader("p3p","cp=\"idc dsp cor adm devi taii psa psd ivai ivdi coni his our ind cnt\"");
%>
至此,问题已解决
上一篇: Mybatis调用Oracle存储过程的方法图文详解
下一篇: Java图像之自定义角度旋转(实例)
推荐阅读
-
iframe跨域与session失效问题的解决办法
-
php中http与https跨域共享session的解决方法
-
IE下PHP iframe跨域导致session丢失问题的解决方法_PHP教程
-
php中http与https跨域共享session的解决方法
-
关于Iframe如何跨域访问Cookie和Session的解决方法_PHP教程
-
PHP关于IE下的iframe跨域导致session丢失问题解决方法_PHP
-
http与https跨域共享session的解决方法
-
IE Frame 下 COOKIE SESSION失效的问题解决办法
-
session跨域的问题,现在有两套系统,怎么打通他们的登录状态,用的thinkSegmentFault
-
php中http与https跨域共享session的解决方法,httpssession