Iframe跨域访问session失效
在平安项目开发中需要的问题:
业务需求要将a系统嵌入到淘宝平台,也就是通过iframe方式嵌入a系统页面,由于是不同平台系统,不同的域名,所以在测试中就发现在嵌入的a系统中会存在session失效问题,开始以为是前端页面问题,但是在FF下测试不存在,IE下才出现,后来google才知道是跨域问题导致:
产生问题场景:
在一个应用A的某个page中, 通过IFrame的方式嵌入另一个应用B某个页面. 当两个应用的domain 不一样时, 在被嵌入的页面中Session失效。(session基于cookie实现,引用页不允许使用cookie).
引用网上解释:
IE6/IE7从安全性角度考虑,支持的P3P(Platform for Privacy Preferences Project (P3P) specification)协议默认阻止第三方无隐私安全声明的cookie,Firefox目前还不支持P3P安全特性,firefox中自然也不存在此问题了。
解决方案:
1. 修改Client的设置
使Client可以接受来自任何网站的Cookie(具体设置在IE选项的隐私页中, 将B站点加入到受信任的站点),或者将两个domain都设置为受信任站点(需要用户设置方案不可取)。
2. 应用的domain修改
简单方案: 两个应用使用同一个domain
复杂方案: 可以在iframe加载的页面里通过setdomain来强制更改
3. P3P
1. 在要嵌入的内容中(iframe指向的站点)输出P3P的主机头声明, 步骤如下:
自定义HTTP头名: P3P,HTTP头值: CP="CAO PSA OUR"
2. 在被嵌入页面响应头里添加一语句:Response.AddHeader("P3P","CP=CAO PSA OUR");
参考:
http://xiaoer-1982.iteye.com/blog/500588
http://www.oschina.net/bbs/thread/4097