通过P3P规范让IE跨域接受第三方cookie,具体做法是在response的header信息中加入P3P响应头信息。
如Java中可加入以下代码:
response.setHeader(
"P3P"
,
"CP='IDC
DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT'"
);
什么是P3P?
P3P是一种被称为个人隐私安全平台项目(the Platform for Privacy Preferences)的标准,是一个隐私设定平台规范。这个规范极其复杂,若要讲清楚,天都黑了一半,附百度百科:
P3P。简言之,就是网站向浏览器声明自己的隐私政策,比如网站是否搜集访问者的个人信息,设置
cookie 的用途等等。浏览器会依据设置,决定在第三方请求的条件下是否接受网站的 cookie。
完整地部署 P3P 包括设立隐私政策文件(policy.html)、原则档(policy.xml)、参考档(p3p.xml),有兴趣详细了解的可以参考
MSDN
中关于部署 P3P 的文章。
也许有人要问了,"CP='IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT'"这长长一串都是什么意思呢?
这些标签就是 P3P 所规定的了,例如 NOI 表示不搜集可识别用户的资料,ADM 表示信息搜集会用于网站管理,详细内容请参考
W3官网中的描述。
浏览器会根据这些标签决定是否接受 cookie,根据测试结果,加上 NOI 最省事,一个就够了。不过网站一般很难做到 NOI,除非永远匿名,“登录”功能可能就违背了NOI。理论上讲,标签应该真实地反映网站的信息搜集行为,若声明的隐私政策与实际行为不符,是会要负法律责任的。Stackoverflow 有篇讨论提出了法律相关议题,可以参考。