2011-05-19 35 views
6

我在这里看到了很多关于如何在IE中的iframe中使用cookie的文章,并且我尝试了几种解决方案,但迄今为止没有运气。这里就是我处理:(一小部件)无法在IE中的IFRAME中设置Cookie,即使使用P3P标头

  • 我有一个是通过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"(我试过几个其他CP的人说工作,但已经看到了结果没有差异。)

  • 的网络服务器(NGINX)正在为此P3P标头提供文件。我没有从代码中提供它。

  • p3p.xml文件存在并与精简策略匹配。 p3p.xml使用W3C P3P验证器进行验证。

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

  • 我在SO上阅读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。

任何帮助都将不胜感激 - 我们在这里越来越绝望。

谢谢!

回答

4

所以,我自己解决了这个问题。看起来问题在于NGINX的HTTPUserIDModule(http://wiki.nginx.org/HttpUserIdModule)。使用发送P3P头我一直,但nginx的不发送头始终,可能是由于该行的文档中:

指令的头 P3P分配值,这将发送连同 cookie。

我看到标题通过检查卷曲或l,时通过,但不是当我检查与Firebug或查尔斯。也许有一个配置选项来解决这个问题,但我找不到它。

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

一旦它通过代码工作,我发现我并不需要所有文件的头文件 - 只有在文件设置/获取cookies就足够了,与我见过的很多建议相反。尽管IBM的政策编辑说它没问题,但我的CP显然过于激进。我使用了更基本的CP,而且工作。

+0

你只使用紧凑策略还是使用p3p.xml文件?你能说你在哪个网站上使用这个政策吗? IE8的中端安全和p3p策略让我的头撞墙了一段时间。 – Sergi 2011-10-26 15:54:18

+0

我只使用了紧凑的策略,特别是:'header('P3P:CP =“CAO PSA OUR”');' – Wemmick 2011-10-26 20:26:50

+0

我会试试看。你需要使用cookie来登录用户吗? – Sergi 2011-10-27 21:30:56

0

变化与nginx的0.8.20
修正:在“设置Cookie”和“P3P” FastCGI的响应报头系是 不隐藏而高速缓存,如果没有“fastcgi_hide_header”指令用的任何参数使用 。

Nginx Changes log