我有两个网站,比如说example.com和anotherexample.net。 在anotherexample.net/page.html上,我有一个IFRAME SRC=“http://example.com/someform.asp”。IFRAME显示一个表单供用户填写并提交到http://example.com/process.asp。当我在它自己的浏览器窗口中打开表单(“someform.asp”)时,一切正常。 然而,当我在ie6或ie7中加载someform.asp作为IFRAME时,example.com的cookie没有保存。在Firefox中,这个问题不会出现。

出于测试目的,我在http://newmoon.wz.cz/test/page.php上创建了一个类似的设置。

example.com使用基于cookie的会话(对此我无能为力),因此如果没有cookie, process.asp将无法执行。我如何迫使IE保存这些cookie ?

嗅探HTTP流量的结果:在GET /someform.asp响应中,有一个有效的每会话Set-Cookie报头(例如Set-Cookie: ASPKSJIUIUGF=JKHJUHVGFYTTYFY),但在POST /process.asp请求中,根本没有Cookie报头。

Edit3:一些AJAX+服务器端脚本显然能够避开这个问题,但这看起来非常像一个bug,而且它还打开了一组全新的安全漏洞。我不希望我的应用程序使用漏洞+安全漏洞的组合只是因为它很容易。

编辑:P3P政策是根本原因,详细解释如下。


当前回答

在Rails中,我使用这个宝石:https://github.com/merchii/rack-iframe Bawically它设置了一组没有引用文件的缩写:https://github.com/merchii/rack-iframe/blob/master/lib/rack/iframe.rb#L8

当您完全不关心p3p内容的含义时,它很容易安装。

其他回答

这个问题被埋在其他答案的评论中,但我几乎没有注意到,所以它似乎应该有自己的答案。

回顾一下:为了让IE接受第三方cookie,你需要为你的文件提供一个名为p3p的http头文件,格式如下:

CP="my compact p3p policy"

但是,在这一点上,p3p作为一个标准几乎已经死了,你可以很容易地让IE工作,而不需要投入时间和法律资源来创建一个真正的p3p策略。这是因为如果你的p3p策略头是无效的,IE实际上会把它当作一个好策略,并接受第三方cookie。你可以使用这样的p3p头文件

CP="This site does not have a p3p policy."

您可以选择包含一个页面链接,以解释为什么您没有p3p策略,就像谷歌和Facebook所做的那样(它们指向这里:https://support.google.com/accounts/answer/151657和这里:https://www.facebook.com/help/327993273962160/)。

最后,需要注意的是,第三方网站提供的所有文件都需要p3p头文件,而不仅仅是设置cookie的头文件,所以你可能不能在PHP、asp.net等代码中这样做。你最好在web服务器级别设置(即在IIS或Apache中)。

如果你拥有需要嵌入的域,那么你可以,在调用包含IFrame的页面之前,重定向到那个域,它将创建cookie并重定向回来, 如下所述:http://www.mendoweb.be/blog/internet-explorer-safari-third-party-cookie-problem/

这不仅适用于ie浏览器,也适用于Safari浏览器(因为Safari浏览器也会屏蔽第三方cookie)。

任何人在node.js中遇到这个问题。

然后添加这个p3p模块,并在中间件中启用这个模块。

npm install p3p

我正在使用express,所以我在app.js中添加了它

首先在app.js中需要该模块

var express = require('express');
var app = express();
var p3p = require('p3p');

然后将其用作中间件

app.use(p3p(p3p.recommended));

它将在res对象中添加p3p头文件。不需要做任何额外的事情。

更多信息请访问:

https://github.com/troygoode/node-p3p

我以前已经实现了一个完整的P3P策略,但我不想再为我正在工作的新项目经历一次麻烦。我发现这个链接对于解决问题的简单解决方案很有用,只需要指定一个最小的紧凑P3P策略“CAO PSA OUR”:

http://blog.sweetxml.org/2007/10/minimal-p3p-compact-policy-suggestion.html

这篇文章引用了一个指向Microsoft kb文章的链接(现在已失效)。政策对我起作用了!

如果有人在寻找阿帕奇线;我们用了这个。

头集P3P "CP=\"谢谢IE8\""

只要有P3P报头,我们将CP值设置为什么并不重要。