首先说下背景。IE下第三方cookie默认是被禁用的,假如你通过iframe引入别的网站的页面并且想要设置cookie的话,默认IE会阻止,导致某些网站的逻辑无法执行下去。
解决这个问题的一种方法是使用P3P。简单来说就是iframe对应的网站在返回的响应中包含一个名字为P3P,值为CP=开头的响应头。具体值网上有很多,但也有说IE只检查是否CP=开头。
但是问题到此没有结束,个人在尝试使用P3P的时候遇到了问题。
现象是不管我怎么设置P3P,IE下第三方cookie就是不被接受。弄了好几天都没有结果,换过P3P的值,换过服务器,换过请求参数,清除浏览器cookie,换cookie的域,重启浏览器都没有效果。非常郁闷。反复对比网上的解决方案和自己的实施,好像没啥两样,但就是不成功。
问题出现转机是在前端的介入。前端尝试用IE6来对比测试有无P3P的第三方cookie的场景,发现前端那边打开带P3P的网站居然成功了!!!后来对比自己的浏览器设置和前端的,发现是IE下的隐私策略的不同。前端那边是默认,但我的是高级-阻止第三方cookie。问题就在这里,IE的隐私策略虽然是默认,但是也会阻止第三方cookie,而且也只有在这时,严格来说是不覆盖程序默认cookie处理策略时P3P才有效。我覆盖了默认cookie处理策略并且阻止第三方cookie的话P3P也没用了!
好吧,搞了那么多天,又被IE摆了一道——老实说,原因个人对于IE的隐私策略不是很了解……