我的公司有一个插入购物车的小部件。我们遇到了一个问题,即在IE7中设置cookie不起作用。发生这种情况是因为我们是第三方,因为我们通过iframe嵌入到网站中。
我看过几篇帖子说解决这个问题的方法是在标题中加入一个P3P紧凑策略。如上所述:
Cookie blocked/not saved in IFRAME in Internet Explorer
我已经验证我的P3P策略在我的HTTP标头中。它实际上适用于购物车网站的第一页/步骤,但只要页面上有个人信息(如姓名,地址,电话等),IE就会阻止我的网站和我的cookie。
我尝试了几种不同的P3P策略,它们都不能在同一个地方工作。我还使用IBM P3P工具生成我自己的特殊P3P策略,但它仍然不起作用。
我完全失去了。
答案 0 :(得分:14)
这可能对其他任何人都没有帮助,但是我在这个问题上撞了几个星期。事实证明IE 7将不允许设置第三方cookie,即使使用有效的P3P紧凑策略,如果Content-Type的HTML元标记在页面上具有不同的字符集声明,其中iframe来自页面内iframe。
答案 1 :(得分:5)
我之前有过类似的问题。确保将p3p标题添加到iframe
内的所有页面。
答案 2 :(得分:4)
有一个非常隐蔽的Internet Explorer 7错误需要注意:在iframe内的304(“未修改”)请求中,Web服务器不会根据RFC发送P3P标头(除非您使用IIS,不关心这些事情)。 IE7实际上删除在该特定请求期间设置的任何cookie。
这将产生你在上面描述的效果,也许这就是正在发生的事情。 IE6& IE8(以及所有其他浏览器)按预期工作。
答案 3 :(得分:3)
Fiddler网络调试器(www.fiddler2.com)在响应中有一个“隐私”检查器选项卡,用于将P3P令牌解码为其含义。检查器底部有一个链接指向MSDN文章,该文章显示默认情况下哪些策略被视为“可接受”。
当然,请注意,P3P政策是法律声明,因此您必须确保您对Cookie的使用与您在P3P中声明的内容相符。
答案 4 :(得分:3)
我们遇到了上述问题,包含304个请求(缓存内容)。我们的负载均衡器正在设置会话cookie,但Apache Web服务器不会包含导致304结果代码的请求的P3P标头。那么会话信息就会搞砸了。
因此,使用Load Balancers需要注意这一点。当他们为持久性跟踪设置cookie时,请确保它还生成P3P标头,以确保它们始终串联发送。
答案 5 :(得分:2)
我遇到了同样的问题,并决定采用谷歌/ Facebook的方法并伪造P3P标题。我最终遇到了一些问题。
问题1:
要返回包含所有请求操作的标题,请将其添加到您的Global.asax中,根据您的需要进行自定义:
protected void Application_BeginRequest(Object sender, EventArgs e) {
//
HttpContext.Current.Response.AddHeader("P3P", "CP=\"This is not a P3P policy! See http://mydomain.com/privacy-policy for more info.\"");
}
问题2:
非常自我解释。在IIS中托管您的项目。
当我读到自2006年以来W3C没有工作或更新标准时,我决定绕过P3P。对我来说,这意味着它已经死了,我们只是有一个主要的浏览器强制执行死标准。该项目是我的,我/是客户。因此,如果您计划采取相同的行动并且您不是为自己写一些东西,请检查它们的权力。
干杯!
答案 6 :(得分:1)
Cookie应该有expires=Fri, 19-Dec-14 18:00:40 GMT
而不是max-age
。
这是CookieStyle=Netscape