即使使用P3P标头,也无法在IE中的IFRAME中设置cookie

时间:2011-05-19 21:54:38

标签: internet-explorer cookies iframe cross-domain p3p

我在这里看到很多关于如何在IE中的iframe中使用cookie的帖子,我已经尝试了几种解决方案,但到目前为止还没有运气。这就是我正在处理的事情:

  • 我有一个通过客户网站(小部件)上的Javascript创建的iframe。我无法控制客户的网站。我需要设置cookie以保持用户在iframe中登录,并且它可以在Chrome和Firefox中使用,但不能在IE 7/8中使用。我没有测试IE 6,但我认为它有同样的问题。

  • 我使用IBM的策略编辑器创建了一个P3P策略,编辑说在IE的安全性下,紧凑策略是可以接受的,无论是设置为低,中还是高。我正在使用的CP是:

P3P: policyref="/w3c/p3p.xml" CP="CAO DSP COR CURa ADMa DEVa PSAa PSDa CONi TELi OUR IND PHY ONL UNI COM NAV INT DEM CNT PRE"(我已经尝试了其他几个人说的工作,但结果没有差异。)

  • 网络服务器(NGINX)正在使用每个文件为此P3P标头提供服务。我不是从代码中提供它。

  • p3p.xml文件存在且与紧凑策略匹配。 p3p.xml使用W3C P3P验证器进行验证。

  • 即使使用P3P标题(无论我尝试了哪一个),IE都会在底部的状态栏中给我“邪恶之眼”并且不会让我设置cookie。他们在隐私报告中显示为已屏蔽。

  • 我读了关于这个主题的Piskvor关于这个主题的帖子:Cookie blocked/not saved in IFRAME in Internet Explorer但我无法重现他在他的演示网站上可以做的事情:http://newmoon.wz.cz/test/page.php?send_p3p=1。我认为这是因为我得到了邪恶的眼睛,而他却没有。我已经完成了我所读到的所有内容,作为摆脱邪恶的建议,但它仍然存在。嘲笑我。

  • 如果您想尝试一下,我的测试页面就在这里:http://truelike.com/js/bobs/frametest.php在iframe外部查看时,设置/读取页面工作正常,但在使用IE时根本不起作用。

  • 作为参考,我在后端使用PHP。

任何帮助都会非常感激 - 我们在这里绝望了。

谢谢!

2 个答案:

答案 0 :(得分:4)

所以,我自己解决了这个问题。看起来问题出在NGINX的HTTPUserIDModule(http://wiki.nginx.org/HttpUserIdModule)上。我一直用它来发送P3P标题,但是 nginx并没有一致地发送标题,可能是因为他们的文档中有这一行:

  

指令为标题指定值   P3P,将与之一起发送   cookie中。

当我用curl或lynx检查时,我看到标题出现了,但是当我用Firebug或Charles检查时没有看到。也许有一个配置选项可以解决这个问题,但我找不到它。

无论如何,如果您拉出HTTPUserIdModule的标头指令OUT并且只是在代码中手动发送标头,则可以。如果您使用HTTPHeadersModule http://wiki.nginx.org/HttpHeadersModule手动发送标头,它可能会工作,但我还没有测试过。

一旦它通过代码,我看到我不需要所有文件的标题 - 只有文件设置/获取cookie就足够了,这与我见过的很多建议相反。

此外,尽管IBM的政策编辑说它没问题,但我的CP显然过于激进了。我使用了更基本的CP,这很有用。

答案 1 :(得分:0)

nginx 0.8.20的变化 修正:“Set-Cookie”和“P3P”FastCGI响应标题行        如果没有“fastcgi_hide_header”指令,则在缓存时不会隐藏        与任何参数一起使用。

Nginx Changes log