情景:webQQ登录,使用的是跨站点iframe弹窗登录,发现只有在IE浏览器下,登录存储session不起作用,一刷新页面就登出
分析:IE限制第三方session/cookie
随着IE版本的不断更新,版本之间变化很大,其兼容性问题困扰着许多开发者。本问题也不例外,IE7以后,微软逐渐改进了IE安全性,其中默认设置下第三方session、cookie是不允许使用的,这就造成了使用iframe嵌入式访问另外的第三方网站时,不能为其保存会话状态,无法进行登录或跨越取值,从而影响第三方网站功能的使用。
解决方法一:IE浏览器手动改接受所有cookie,但这种做法对用户不友好,对用户浏览器的安全性也低
解决方法二、利用P3P协议自动更改IE浏览器安全级别
手动科普下P3P:
有别于JS跨域、IFRAME跨域等的常用处理办法,还可以利用P3P来实现跨域。
P3P是什么
P3P(Platform for Privacy Preferences)是W3C公布的一项隐私保护推荐标准,以为用户提供隐私保护。
P3P标准的构想是:Web 站点的隐私策略应该告之访问者该站点所收集的信息类型、信息将提供给哪些人、信息将被保留多少时间及其使用信息的方式,如站点应做诸如 “本网站将监测您所访问的页面以提高站点的使用率”或“本网站将尽可能为您提供更合适的广告”等申明。访问支持P3P网站的用户有权查看站点隐私报告,然 后决定是否接受cookie 或是否使用该网站。
如何利用P3P实现跨域
在开发中,我们碰到的跨域主要还是纠结在IE,页面中的IFRAME或者FRAME或者JS跨域的时候,IE有安全策略限制页面不带cookie,但是如果我们加上P3P,就没有这策略的限制。这也是P3P来突破跨域的可行前提。
最终解决办法:
<?php
header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');
return "QQ回调程序";
?>
如果觉得《QQ登录IE下iframe跨域session和cookie失效问题的解决方案》对你有帮助,请点赞、收藏,并留下你的观点哦!