情景:在做开心网APP开发的时候,开心网APP是用iframe引用的,在IE中发现不能读写cookies,而在Firefox和Chrome中正常。
问题:在IE6中,Frame和 IFrame中无法按常规方法来读写cookies。
原因:因为IE6加入了以Platform for Privacy Preferences(P3P)为基础的 隐私保护功能,用户可以根据cookie的发信方是否提供第一方(信息接收人)还是第三方(共享信息的第三者)、信息的接收及使用、散发的选择项(用户是否拒绝将信息提供给第三者进行二次利用)等相关信息,来调节cookie的接收与否。
解决:只需要设置 P3P HTTP Header,在隐含 iframe 里面跨域设置 cookie 就可以成功。
具体的内容是:P3P: CP=’CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR’
示例:
ASP:
1
|
<%Response.AddHeader "P3P" , "CP=CAO PSA OUR" %> |
php:
1
|
header( 'P3P: CP=CAO PSA OUR' ); |
ASP.NET:
1
|
Response.AppendHeader( "P3P" , "CP=CAO PSA OUR" ); |
JSP:
1
|
response.setHeader( "P3P" , "CP=CAO PSA OUR" ) |