我在这里看到很多关于如何在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。
任何帮助都会非常感激 - 我们在这里绝望了。
谢谢!
答案 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”指令,则在缓存时不会隐藏 与任何参数一起使用。