iframe下cookie设置的问题
万恶的IE安全设置问题,估计让不少人为之纠结,最近项目中又被狠狠的坑了一把... 在iframe嵌入页面中设置cookie,会发现cookie失效,取值都为空。在项目中表现为用户登录的登录名称,密码都为空,用户登录信息得不到验证,页面直接跳转至另一个项目的登录页。百度得知在IE下加入了以P3P为基础的隐私保护功能,当第三方站点设置cookie,IE会自动拦截。 只需要设置 P3P HTTP Header,在隐含 iframe 里面跨域设置 cookie 就可以成功。
ASP直接在头部加了头部申明 <%Response.AddHeader "P3P", "CP=CAO PSA OUR"%>
ASP.NET的话 方法一:通过在代码头部加Response.AddHeader("P3P", "CP=CAO PSA OUR"),此方法已经测试,cookie设置成功。 方法二:在Window服务中将ASP.NET State Service 启动。
JSP: response.setHeader("P3P","CP=CAO PSA OUR")
下面是对P3P及P3P策略的简单介绍: P3P是万维网联盟(W3C)公布的一项隐私保护推荐标准,旨在为网上冲浪的Internet用户提供隐私保护。现在有越来越多的网站在消费者访问时,都 会收集一些用户信息。制定P3P标准的出发点就是为了减轻消费者因网站收集个人信息所引发的对于隐私权可能受到侵犯的忧虑。P3P标准的构想是:Web 站点的隐私策略应该告之访问者该站点所收集的信息类型、信息将提供给哪些人、信息将被保留多少时间及其使用信息的方式,如站点应做诸如 “本网站将监测您所访问的页面以提高站点的使用率”或“本网站将尽可能为您提供更合适的广告”等申明。访问支持P3P网站的用户有权查看站点隐私报告,然 后决定是否接受cookie或是否使用该网站。
P3P策略实际就是一个部署在Web服务器上的简单XML文件,指明网站打算使用哪些cookie以及派什么用途。这个XML文件类似这种格式
<META xmlns="http://www.w3.org/2000/12/P3Pv1">
<POLICY-REFERENCES>
<POLICY-REF about="/P3P/Policy1.xml">
<COOKIE-INCLUDE name="*" value="*" domain="*" path="*"/>
</POLICY-REF>
</POLICY-REFERENCES>
</META>
可以使用IBM的P3P策略编辑器IBM's P3P Policy Editor来编写这个文件