业务需求要将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");
response.setHeader("P3P","CP='IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT'");
相关推荐
iframe 跨域访问session问题解决方法
以前在面试的时候经常遇到问关于跨域的事儿,所以自己对跨域有一定的概念性了解,知道什么是跨域以及解决跨域的方法,但是具体实际从来没有操作过,直到最近在公司项目中,遇到了一个需要使iframe跨域进行POST提交的...
iframe 跨域 自动适应高度;iframe 跨域 自动适应高度;
框架完美解决了iframe之间的跨域通讯。底层技术采用window.name转换代理实现
iframe跨域访问示例
iframe跨域问题:Uncaught DOMException Blocked a frame with origin解决方法
finereport是一款常用的表格制作软件/报表开发工具,本资源讲述在表格制作软件中实现iframe跨域单点登陆的具体实现方法,包括具体的操作步骤和实现代码等
NULL 博文链接:https://hqlly.iteye.com/blog/1662337
该文档介绍了vue和普通web页面中iframe实现跨域的解决方案,解决了主页面中无法调用iframe方法的问题
iframe 跨域 自适应高度 模板 iframe 跨域 自适应高度 模板 iframe 跨域 自适应高度 模板
在web开发中,跨域问题是经常遇到的,但是由于浏览器同源策略的限制,不同域之间属性和操作是无法直接交互的。本次讨论iframe和父页面的消息通信。
iframe跨域嵌套自适应高度 iframe跨域嵌套 丢失session值(针对嵌套asp.net 做的网站)
NULL 博文链接:https://thoreau.iteye.com/blog/745100
可以实现Iframe跨域自适应高度 main.htm和agent.htm文件放在www.a.com域内 iframe.htm放在www.b.com域内 这样就可以通过a.com域中的main.htm文件访问b.com域中的iframe.htm文件了
实现内嵌的iframe跨域调用父页面js方法
MessengerJS-master(iframe跨域通信) MessengerJS-master(iframe跨域通信)
iframe 与主框架相互访问例子,包含同域访问,跨域访问例子。
【ASP.NET编程知识】iframe跨域与session失效问题的解决办法.docx