15

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

我看过几篇文章说解决这个问题的方法是在标题中放置一个 P3P 紧凑策略。如前所述:

Cookie 被阻止/未保存在 Internet Explorer 的 IFRAME 中

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

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

我完全不知所措。

4

7 回答 7

15

这可能对其他人无济于事,但为此我已经把头撞在墙上好几个星期了。事实证明,IE 7 不允许设置 3rd-party cookie,即使使用有效的 P3P 紧凑策略,如果 Content-Type 的 HTML 元标记在页面上具有不同的字符集声明,并且来自页面内的 iframe内嵌框架。

于 2009-11-21T01:08:36.240 回答
5

前段时间我自己也遇到过类似的问题。确保将 p3p 标头添加到iframe.

于 2009-06-16T05:17:47.613 回答
4

需要注意一个非常隐蔽的 Internet Explorer 7 错误:在 iframe 内的 304(“未修改”)请求中,Web 服务器不会根据 RFC 发送 P3P 标头(除非您使用的是 IIS,它不关心这些事情)。IE7 实际上会删除该特定请求期间设置的任何 cookie。

这将产生您在上面描述的效果,所以也许这就是正在发生的事情。IE6 和 IE8(以及所有其他浏览器)按预期工作。

于 2010-11-29T17:49:22.283 回答
3

The Fiddler web debugger (www.fiddler2.com) has a "Privacy" inspector tab on the response which decodes the P3P tokens into their meanings. There's a link at the bottom of the inspector which points to the MSDN article that shows which policies are considered "acceptable" by default.

Note, of course, that P3P policies are a Legal declaration, so you must be sure that your use of cookies matches what you claim in P3P.

于 2009-06-26T04:55:11.657 回答
3

我们遇到了上述问题,304 请求(缓存内容)。我们的负载均衡器正在设置会话 cookie,但 Apache Web 服务器不会包含导致 304 结果代码的请求的 P3P 标头。那么会话信息就会变得混乱。

所以这是负载均衡器需要注意的事情。当他们为持久性跟踪设置 cookie 时,确保它还生成 P3P 标头,以确保它们始终串联发送。

于 2011-11-03T22:11:35.080 回答
2

I had the same issue and decided to take the Google/Facebook approach and fake out the P3P header. I did end up having some problems though.

  1. First you must make sure that you pass that header with ALL.
  2. If you are using the Visual Studio Development Webserver the P3P header will be ignored for some reason. So host your app in IIS.

Problem 1:

To return that header with all of your requested actions add this to your Global.asax, customizing it for your needs of course:

 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.\"");
        }

Problem 2:

Pretty self explanatory. Host your project in IIS.

I made the decision to bypass the P3P when I read that W3C had not worked on or updated the standard since 2006. That to me, means it is dead and we just have a major browser enforcing a dead standard. The project was mine, I was/am the client. So if you plan on taking the same actions and you're not writing something for yourself, check with the powers that be.

Cheers!

于 2012-08-03T20:05:34.660 回答
1

cookie 应该有expires=Fri, 19-Dec-14 18:00:40 GMT而不是max-age.

这由配置在 Apache mod_usertrack中控制CookieStyle=Netscape

于 2012-12-19T18:07:51.243 回答