IE、P3P、IFrame 和阻止的 cookie(在页面主机页面请求个人信息之前有效)
Posted
技术标签:
【中文标题】IE、P3P、IFrame 和阻止的 cookie(在页面主机页面请求个人信息之前有效)【英文标题】:IE, P3P, IFrame and blocked cookies (works until page host page has personal information requested) 【发布时间】:2010-11-03 05:27:11 【问题描述】:我的公司有一个可以插入购物车的小部件。我们遇到了在 IE7 中设置 cookie 不起作用的问题。发生这种情况是因为我们是第 3 方,因为我们通过 iframe 嵌入到网站中。
我看过几篇帖子说解决这个问题的方法是在标题中放置一个 P3P 紧凑策略。如前所述:
Cookie blocked/not saved in IFRAME in Internet Explorer
我已验证我的 P3P 策略在我的 HTTP 标头中。它实际上适用于购物车网站的第一页/步骤,但是一旦页面上有个人信息(如姓名、地址、电话等),IE 就会阻止我的网站和我的 cookie。
我尝试了几种不同的 P3P 策略,但它们都不能在同一个地方起作用。我还使用 IBM P3P 工具生成了我自己的特殊 P3P 策略,但它仍然不起作用。
我完全不知所措。
【问题讨论】:
【参考方案1】:这可能对其他人无济于事,但我为此苦苦挣扎了好几个星期。事实证明,IE 7 不允许设置 3rd-party cookie,即使使用有效的 P3P 紧凑策略,如果 Content-Type 的 html 元标记在页面上具有不同的字符集声明,其中的 iframe 来自页面iframe。
【讨论】:
它给了我几分钟的希望。 :D【参考方案2】:前段时间我自己也遇到过类似的问题。确保将 p3p 标头添加到iframe
内的所有页面。
【讨论】:
感谢您的提示。不过,我已经验证了 p3p 标头适用于我提供的所有内容。 (我用的是ieHTTPHeaders) Ok..更改ie中的隐私设置,然后以低安全性进行测试。如果它有效,那么问题出在您的源代码上。您还可以将 FF 与 Web 安全工具栏一起使用。更改隐私设置并使用 Web 开发人员工具栏查看 cookie 发生了什么。 Shobab,感谢您的提示。我降低了 IE 中的安全性,它把我网站的 cookie 状态从“阻止”更改为“受限”。这对我有用。有限制就够了。我不确定我的源代码可能存在什么问题——也许我的 p3p 策略不够好?在哪里可以找到 FF 网络安全工具栏?很高兴能找到一些东西来告诉我为什么我的 p3p 政策不够好。 搜索FF的Webdeveloper工具栏就可以了。它是 Web 开发人员的必备工具。它绝对是您的 p3p 标头的问题。在 Web 开发人员工具栏中,有一个选项可以检查 p3p 标头,因此请使用它。这就是我解决问题的方法。我知道你的感受,因为我在这个问题上待了一周;-) 请随时通过 shobankr[at]gmail.com 给我发电子邮件,我很乐意提供帮助。 BTW Shoban 是我的名字不是 shobab ;-) 再次感谢您,Shoban。我找不到 p3p 标头的验证器。我可以使用 Web 开发人员工具栏 (v 1.1.6) 来查看我的 p3p 标头,但我看不到任何可以验证它的东西。【参考方案3】:需要注意一个非常隐蔽的 Internet Explorer 7 错误:在 iframe 内的 304(“未修改”)请求中,Web 服务器不会根据 RFC 发送 P3P 标头(除非您使用IIS,它不关心这些事情)。 IE7 实际上会删除在该特定请求期间设置的任何 cookie。
这将产生您在上面描述的效果,所以也许这就是正在发生的事情。 IE6 和 IE8(以及所有其他浏览器)按预期工作。
【讨论】:
看起来它也会影响 IE8。【参考方案4】:Fiddler Web 调试器 (www.fiddler2.com) 在响应上有一个“隐私”检查器选项卡,它将 P3P 令牌解码为其含义。检查器底部有一个链接指向 MSDN 文章,该文章显示默认情况下哪些策略被认为是“可接受的”。
当然,请注意,P3P 政策是一项法律声明,因此您必须确保您对 cookie 的使用与您在 P3P 中声明的内容相符。
【讨论】:
Fiddler 底部的链接将带您进入此页面,该页面仅描述了 IE6 可接受的策略:msdn.microsoft.com/en-us/library/… 有人知道最近的参考吗? 自 IE6 以来 P3P 默认设置没有改变。 @EricLaw:当然,您的答案是一个古老的答案,但是隐私检查器选项卡是否已从 Fiddler 中删除?我正在运行 Fiddler 4(仍然标记为 fiddler2 - v4.4.2.1 beta),但我在任何地方都没有看到它(我也不记得在以前的版本中看到过)【参考方案5】:我们在 304 请求(缓存内容)中遇到了上述问题。我们的负载均衡器正在设置会话 cookie,但 Apache Web 服务器不会包含导致 304 结果代码的请求的 P3P 标头。那么会话信息就会变得混乱。
因此,负载均衡器需要注意这一点。当他们为持久性跟踪设置 cookie 时,请确保它还生成 P3P 标头,以确保它们始终串联发送。
【讨论】:
【参考方案6】:我遇到了同样的问题,并决定采用 Google/Facebook 的方法并伪造 P3P 标头。不过,我确实遇到了一些问题。
-
首先,您必须确保使用 ALL 传递该标头。
如果您使用 Visual Studio Development Webserver,P3P 标头将因某种原因而被忽略。因此,将您的应用托管在 IIS 中。
问题一:
要返回包含您请求的所有操作的标头,请将其添加到您的 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 中托管您的项目。
当我读到 W3C 自 2006 年以来没有工作或更新标准时,我决定绕过 P3P。对我来说,这意味着它已经死了,我们只是有一个主要的浏览器执行一个死的标准。该项目是我的,我是/是客户。因此,如果您打算采取相同的行动并且您不是为自己写东西,请检查一下现有的权力。
干杯!
【讨论】:
【参考方案7】:cookie 应该有expires=Fri, 19-Dec-14 18:00:40 GMT
而不是max-age
。
这是controlled in Apache mod_usertrack 配置CookieStyle=Netscape
【讨论】:
以上是关于IE、P3P、IFrame 和阻止的 cookie(在页面主机页面请求个人信息之前有效)的主要内容,如果未能解决你的问题,请参考以下文章
即使使用 P3P 标头,也无法在 IE 的 IFRAME 中设置 cookie