IE,P3P,IFrame和阻止的cookie(在页面主机页面请求个人信息之前有效)

时间:2009-06-16 04:14:51

标签: internet-explorer iframe cookies p3p

我的公司有一个插入购物车的小部件。我们遇到了一个问题,即在IE7中设置cookie不起作用。发生这种情况是因为我们是第三方,因为我们通过iframe嵌入到网站中。

我看过几篇帖子说解决这个问题的方法是在标题中加入一个P3P紧凑策略。如上所述:

Cookie blocked/not saved in IFRAME in Internet Explorer

我已经验证我的P3P策略在我的HTTP标头中。它实际上适用于购物车网站的第一页/步骤,但只要页面上有个人信息(如姓名,地址,电话等),IE就会阻止我的网站和我的cookie。

我尝试了几种不同的P3P策略,它们都不能在同一个地方工作。我还使用IBM P3P工具生成我自己的特殊P3P策略,但它仍然不起作用。

我完全失去了。

7 个答案:

答案 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. 首先,您必须确保使用ALL传递该标题。
  2. 如果您使用的是Visual Studio开发Web服务器,则由于某种原因将忽略P3P标头。所以在IIS中托管你的应用程序。
  3. 问题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

controlled in Apache mod_usertrack