我已经解决了问题,但是解决方案有点复杂,请您耐心等待。
发生了什么
目前,Internet Explorer在处理IFRAME页面(IE称之为“第三方”内容)时会给予更低的信任级别。如果IFRAME内部的页面没有隐私政策,它的cookies将被阻止(通过点击状态栏中的眼睛图标,可以显示一个被阻止URL的列表)。
(来源:piskvor.org)
在这种情况下,当cookies被阻止时,会导致会话标识符未被发送,目标脚本就会抛出“找不到会话”的错误。
(我曾尝试将会话标识符设置到表单中并从POST变量中加载。 这本来可以解决问题,但由于某些政治原因,我无法这样做。)
可以使IFRAME内部的页面更受信任:如果内部页面发送了一个带有可接受于IE的隐私政策的P3P标头,那么cookies将被接受。
如何解决
创建一个P3P策略
一个好的起点是W3C教程。我已经阅读了它,并下载了IBM隐私策略编辑器,在那里我创建了一个隐私策略的表示并给它一个名称以供引用(这里是policy1
)。
注:此时,您需要确定您的网站是否有隐私政策,并在没有的情况下创建它-不管它是否收集用户数据、什么类型的数据、以及它如何使用、谁可以访问等等。您需要找到这些信息并进行思考。 简单地拼凑几个标签是不够的。这一步不能完全依靠软件完成,并且可能非常政治化(例如,“我们应该出售点击统计数据吗?”)。
(例如“该网站由ACME有限公司运营,为其操作使用匿名的会话标识符,只有在明确允许并且仅出于以下目的收集用户数据,数据只保存必要时间,只有我们的公司可以访问等等”)。
(在使用此工具进行编辑时,可以查看隐私政策中的错误/遗漏。还有一个非常有用的选项卡“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上的Web服务器设置为发送带有响应的紧凑标头,如下所示:
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标头必须真实地代表您自己的隐私政策!
利润!
在此配置中,邪眼不会出现,cookie甚至在IFRAME中保存,应用程序也可以正常工作。
编辑:除非你喜欢被诉讼,否则不要这样做
有几个人建议“只需将一些标签放入P3P标头中,直到邪眼放弃”。
这些标签不仅是一堆位,它们还具有现实世界的含义,它们的使用给您带来真实的责任!
例如,假装您从未收集用户数据可能会使浏览器感到满意,但如果您实际收集用户数据,则P3P与现实冲突。简单明了,您正在故意欺骗用户,在某些国家可能构成犯罪行为。例如,“入狱,不要收取200美元”。
一些示例(请参阅p3pwriter获取完整的标签集):
- NOI:“网站不收集已确定的数据。”(只要有任何定制、登录或任何数据收集(*****Analytics,任何人?),您必须在P3P中承认它)
- STP:信息保留以满足规定目的。这需要尽快丢弃信息。站点必须有一个保留政策,以建立销毁时间表。保留政策必须包含在或链接到站点的可读性隐私政策中。”(因此,如果您发送
STP
但没有保留政策,则可能会构成欺诈。多酷啊?根本不酷。)
我不是律师,但我不愿意去法庭上看P3P头部是否真的具有法律约束力,或者你能否在不愿意履行承诺的情况下向用户承诺任何事情。