IFrame跨域.doc

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
IFrame跨域

晕掉,IE真是超级破,还好我二年没用它了(用了二年linux做桌面).这次一个大问题,客户的一台主页使用了frame的方法来固定自己的域名指向一个二级,为了让用户看起来更加好. 但发现很多用户不能登陆,但有的用户也能登陆(现在才清楚能上的都是firefox)。查了好久,后来发现原来是IE有个叫P3P(The Platform for Privacy Preferences)隐私参数选择平台,这样的一个超强的功能. 在frameset里面,也就是里面的frame是来自第三方站点(不同IP或不同域名),那么默认情况下IE会自动禁用这些站点的cookie,也就是在请求某url时在HTTP header里不发送它们的cookie,包括session的cookie。注意,这些站点在response里面设置的cookie还是会被发送到浏览器的。 但象IE 6.0和IE 7.0有个自己的标准.要支持P3P,IE 6的缺省隐私等级设置为"中"——即"阻止没有合同隐私策略的第三方cookie"。而在用户浏览a.php时 A.com写入的为第一方Cookie,其嵌入的iframe指向b.php.这时B.com写入的就为第三方Cookie了,所以它是被IE当在了大门外。 所以,每次当用户提交的cookie提交时,就挂掉了.因为传不到真实的服务器. 好了,不多讲了,直接讲解决方案. PHP的程序 可以直接在B网站中写入 <?php header(‘P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"’) ?> 这样就能接受第三方的Cookie啦。 lighttpd的服务器 server.modules??? = ("mod_setenv") setenv.add-response-header = ( "P3P" => "CP=’CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR’") apache的服务器 <VirtualHost> Header set P3P ‘CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"’ </VirtualHost> IIS的服务器 增加一个网站http头来解决问题; 管理工具——〉选择一个网站——〉属性——〉http头,增加一个http头 然后输入头名:P3P 输入头内容:CP=CAO PSA OUR 问题描述: ?? 在一个应用(domain: A)的某个page中, 通过IFrame的方式嵌入另一个应用(domain: B)的某个页面. 当两个应用的domain 不一样时, 在被嵌入的页面中不允许使用cookie(即使用cookie实现的session会失效). 问题分析: ?? 在XP SP2和IE6之后,从安全性角度考虑,默认状态下不允许在iframe里使用跨站点cookie。 解决方案: ?? 1. 修改Client的设置 ??? 使Client可以接受来自任何网站的Cookie(具体设置在IE选项的隐私页中)(测试通过). ?? 或者将两个domain都设置为受信息站点(测试通过). ?? 2. 应用的domain修改 ??? 简单方案: 两个应用使用同一个domain(没有测试). ?? 复杂方案: 可以在iframe加载的页面里通过setdomain来强制更改(没有测试). ?? 3. P3P ?? 第一种: 在要嵌入的内容中(iframe指向的站点)输出P3P的主机头声明,步骤如下: > 打开IIS管理器 inetmgr > 选择被嵌入iframe源站点或者目录,右键点击打开属性框 > 切换到HTTP头 > 添加 > 自定义HTTP头名: P3P > 自定义HTTP头值: CP="CAO PSA OUR" > 关闭属性框退出,即刻生效 ?? 第二种: 在被嵌入页面page_onload里添加一语句:Response.AddHeader("P3P","CP=CAO PSA OUR")(测试通过); Sorry 因为没有办法详细测试所以 bug 在所难免呵呵 那么被包含的页 复制内容到剪贴板 代码: onload="window.clipboardData.setData('text',String(window.document.body.scrollHeight));" 主页面 复制内

文档评论(0)

f8r9t5c + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8000054077000003

1亿VIP精品文档

相关文档