6

我在这里看到了很多关于如何让 cookie 在 IE 的 iframe 中工作的帖子,并且我尝试了几种解决方案,但到目前为止都没有运气。这是我正在处理的问题:

  • 我有一个通过 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。它们在隐私报告中显示为已阻止。

  • 我阅读了 Piskvor 关于这个主题的帖子:Cookie 被阻止/未保存在 Internet Explorer 的 IFRAME 中,但我无法重现他在演示站点上所做的事情:http: //newmoon.wz.cz/test /page.php?send_p3p=1。我认为这是因为我得到了邪恶的眼睛而他没有。我已经完成了我所读到的一切作为摆脱邪恶的建议,但它仍然存在。嘲笑我。

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

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

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

谢谢!

4

2 回答 2

4

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

指令为头 P3P 分配值,它将与 cookie 一起发送。

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

无论如何,如果您将 HTTPUserIdModule 的标头指令拉出并仅在代码中手动发送标头,它就可以工作如果您使用 HTTPHeadersModule http://wiki.nginx.org/HttpHeadersModule手动发送标头,它可能会起作用,但我尚未对此进行测试。

一旦它通过代码工作,我发现我不需要所有文件的标题 - 仅在文件设置/获取 cookie 上使用它就足够了,这与我看到的许多建议相反。

此外,我的 CP 显然过于激进,尽管 IBM 的政策编辑说没关系。我使用了一个更基本的CP,并且有效。

于 2011-05-20T15:16:15.443 回答
0

Changes with nginx 0.8.20
Bugfix: the "Set-Cookie" and "P3P" FastCGI response header lines were not hidden while caching if no "fastcgi_hide_header" directives were used with any parameters.

Nginx Changes log

于 2013-07-29T09:26:23.510 回答