WithCoderWithCoderWithCoder

IE 跨域cookie无效的解决

    在前面的文章中“谷歌浏览器Chrome 80版本默认SameSite导致跨域请求Cookie丢失”,我们知道 Chrome 升级到80版本后,默认限制了跨域携带cookie给后端。在解决这个问题的同时,发现有用户在使用 IE 浏览器时,通过IFrame嵌套页面时,也出现了Cookie丢失的问题。

    经过查找,发现原来是 IE 有个叫P3P(The Platform for Privacy Preferences)隐私参数选择平台这样一个功能。如果 frame 是来自第三方站点(不同IP或不同域名),那么默认情况下 IE 会自动禁用这些站点的cookie,也就是在请求某url时在HTTP header里不发送它们的 cookie,包括 session 的 cookie。注意,这些站点在 response里面设置的cookie还是会被发送到浏览器的。

    但像IE 6.0和IE 7.0有个自己的标准,要支持P3P,IE 6的缺省隐私等级设置为"中"——即"阻止没有合同隐私策略的第三方cookie"。而在用户通过frame嵌套浏览第三方网页时,就造成了跨域,第三方网站的Cookie就会丢失。

    要解决这个问题,只需要在header中添加P3P即可。

    PHP程序处理方式:

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>

欢迎分享交流,转载请注明出处:WithCoder » IE 跨域cookie无效的解决