我让它工作,但解决方案有点复杂,所以请耐心等待。
发生了什么
事实上,Internet Explorer 对 IFRAME 页面的信任级别较低(IE 将此称为“第三方”内容)。如果 IFRAME 内的页面没有隐私政策,则其 cookie 将被阻止(由状态栏中的眼睛图标指示,当您单击它时,它会显示被阻止的 URL 列表)。
(来源:piskvor.org)
在这种情况下,当 cookie 被阻止时,不会发送会话标识符,并且目标脚本会抛出“未找到会话”错误。
(我尝试将会话标识符设置到表单中并从 POST 变量中加载它。这本来可以,但出于政治原因我不能这样做。)
可以使 IFRAME 内部的页面更受信任:如果内部页面发送带有 IE 可接受的隐私策略的 P3P 标头,则 cookie 将被接受。
如何解决
创建 p3p 策略
W3C 教程是一个很好的起点。我浏览了它,下载了IBM 隐私政策编辑器,在那里我创建了隐私政策的表示,并给它一个名称以供参考(这里是policy1
)。
注意:此时,您实际上需要确定您的网站是否有隐私政策,如果没有,请创建它 - 它是否收集用户数据,什么样的数据,它用它做什么,谁可以访问它,等等。你需要找到这些信息并考虑一下。只是将几个标签贴在一起不会削减它。此步骤不能仅在软件中完成,并且可能具有高度政治性(例如,“我们应该出售我们的点击统计数据吗?”)。
(例如“该网站由 ACME Ltd. 运营,它使用匿名的每个会话标识符进行操作,仅在明确允许的情况下收集用户数据并且仅用于以下目的,数据仅在必要时存储,仅我们公司可以访问它,等等。”)。
(使用此工具进行编辑时,可以查看策略中的错误/遗漏。“HTML 策略”选项卡也非常有用:在底部,它有一个“策略评估” - 快速检查策略是否会被阻止通过 IE 的默认设置)
编辑器导出到 .p3p 文件,这是上述策略的 XML 表示。此外,它可以导出此策略的“精简版”。
政策链接
然后需要一个政策参考文件 ( http://example.com/w3c/p3p.xml
)(网站使用的隐私政策索引):
<META>
<POLICY-REFERENCES>
<POLICY-REF about="/w3c/example-com.p3p#policy1">
<INCLUDE>/</INCLUDE>
<COOKIE-INCLUDE/>
</POLICY-REF>
</POLICY-REFERENCES>
</META>
<INCLUDE>
显示将使用此策略的所有 URI(在我的例子中是整个站点)。我从编辑器导出的策略文件已上传到http://example.com/w3c/example-com.p3p
发送带有响应的紧凑标头
我在 example.com 上设置了网络服务器以发送带有响应的紧凑标头,如下所示:
HTTP/1.1 200 OK
P3P: policyref="/w3c/p3p.xml", CP="IDC DSP COR IVAi IVDi OUR TST"
// ... other headers and content
policyref
是策略参考文件的相对 URI(它反过来引用隐私策略),CP
是紧凑的策略表示。请注意,示例中的 P3P 标头组合可能不适用于您的特定网站;您的 P3P 标头必须如实代表您自己的隐私政策!
利润!
在此配置中,不会出现 Evil Eye,cookie 甚至保存在 IFRAME 中,并且应用程序可以正常工作。
编辑:不该做什么,除非你喜欢为诉讼辩护
一些人建议“在你的 P3P 标题中添加一些标签,直到 Evil Eye 放弃”。
标签不仅是一堆比特,它们还具有现实世界的意义,它们的使用赋予了你现实世界的责任!
例如,假装你从不收集用户数据可能会让浏览器高兴,但如果你真的收集用户数据,那么 P3P 与现实相冲突。简单明了,您是故意对用户撒谎,这在某些国家可能是犯罪行为。如,“去监狱,不要收 200 美元”。
一些示例(请参阅 p3pwriter 了解完整的标签集):
- NOI:“网站不收集已识别的数据。” (一旦有任何自定义、登录或任何数据收集(***** 分析,有人吗?),您必须在 P3P 中确认)
- STP:保留信息以满足所述目的。这要求尽可能早地丢弃信息。站点必须具有建立销毁时间表的保留策略。保留政策必须包含在网站的可读隐私政策中或与之链接。”(因此,如果您发送
STP
但没有保留政策,您可能会进行欺诈。这有多酷?一点也不。)
我不是律师,但我不愿意去法庭看看 P3P 标头是否真的具有法律约束力,或者您是否可以向您的用户承诺任何事情而实际上并不愿意兑现您的承诺。