P3P 跨域访问第三方cookie的解决方案 适合解决UC的同步登录问题
2012-03-26 10:00
1006 查看
一直没找到这篇文章的出处我,网上搜索到的都是转载的,先转过来当存档吧。
以下是转载的内容:
背景介绍
我所在的公司是一个集团公司,在国内外有若干个分公司和办事处,每个分公司都有一个局域网,另外公司总部还负责维护着一个Internet网站。各个分公 司内部局域网都使用同一套B/S结构的业务操作系统,同时Internet网站上还有一套业务跟踪系统,也是B/S结构。两者都使用ASP开发。现在因为 业务需要,要在内部的业务操作系统中和Internet的业务跟踪系统交互。由于两个系统都是B/S结构,而且界面也很相似,为了防止操作人员工作时混淆 (将内部业务数据发布到Internet业务跟踪系统上),技术主管决定将Internet跟踪系统使用<IFRAME>内嵌在内部业务系统
的一个特定asp文件中。
两边的开发工作很快结束。但在将Internet跟踪系统内嵌进内部业务系统后却无法实现Internet跟踪系统的登录。原因很快找到--因为IE 6的增强安全机制,通过<IFRAME>内嵌一个三方网页时,缺省设置不允许使用该第三方的cookie。不允许使用cookie就意味着无 法使用Session。没有Session自然无法登录。
该问题的解决也很简单,只要在IE的Internet选项--》隐私--》高级中将"覆盖自动cookie处理"选中,然后选择接受第一方cookie和接受第三方cookie即可。
但是,这一解决方法被技术主管否决,理由是对一个连设置IE主页都需要指导的操作人员,要其更改IE的隐私策略预计将是一件非常困难的事。而且各分公司分 散在各地,使用B/S系统就是为了方便维护和更新,如果系统更新涉及客户端,那就难免会有遗漏和延迟。就算能够准时准确的更新,公司的电脑也会有淘汰和重 装操作系统的时候,我们不可能要求操作人员记住每次电脑重装后还要检查IE的隐私策略是否正确。
在修改IE隐私策略这条路堵死以后,我将目光定位于IE隐私策略的声明上,默认的IE隐私策略设置为中,具体设置包括“阻止没有合同隐私策略的第三方cookie”。那么如果有"合同隐私策略"是否就行了呢?通过Google得知这就是P3P(Platform. for Privacy Preferences)。接下来就是如何设置网站的P3P了。经过一番摸索,总算对P3P有了一点眉目。中间过程就不废话了,这里只告诉大家具体怎么操 作。如果有人对P3P有兴趣,请参考
P3P的官方网站http://www.w3.org/P3P/
P3P三步曲
第一步,在目标网站(就是你希望将其嵌入<IFRAME>的第三方网站,在这个例子中就是公司的Internet网站)的根目录下建立一个名 为w3c的目录,名字其实无所谓,但是下面的例子中都是用/w3c做路径,所以在你看完这篇文章前请照做。在其下建立一个名为p3p.xml的文件,该文 件相当于一个目录,用来声明网站使用了哪些P3P文件。具体文件内容如下:
其中<META>的xmlns是xml的名称空间声明,除非P3P标准发生变化,否则固定不变。<POLICY-REF>的about便是完整的P3P文件定位。其下的<INCLUDE>用来指定该P3P文件适用的范围。相应的,不适用的范围 用<EXCLUDE>指定。值/*表示根目录下的所有文件(含目录)。写过ASP.net的配置文件的人对/*这种写法一定不陌生^_^。<COOKIE-INCLUDE>表示该P3P文件适用于cookie。因此,完整的含义就是该P3P文件对网站根目录下的所有文件 和cookie都适用。如果网站有多个P3P文件,每个P3P文件适用不同的目录,那么只要设定多个<POLICY-REF>,并指定每
个<POLICY-REF>的<INCLUDE>和<EXCLUDE>即可。
第二步,同样是在w3c目录下,建立一个名为policy.p3p的文件,该文件也是一个xml文件,具体内容如下(这个例子来源于http://www.bravenet.com/w3c/policy.p3p,仅做学习参考使用,该文件版权归www.bravenet.com所有,任何人不经www.bravenet.com同意不得以商业目的复制,传播,销售该文件):
由此可以看出P3P的设置还是很繁琐的。所以一些公司已经开发P3P的编辑工具。像这个例子就是由IBM P3P Policy Editor生成的。其实如果你像我一样仅仅为了覆盖IE的cookie设置,完全不必下载那些编辑工具,只要将这份文件中的几个关键位置修改一下即可 (其实我就是这么做的^_^)。
废话少说,该P3P文件中几个关键的地方包括:
<POLICY>下的discuri,其值是一个URL,用于指定网站的完整隐私政策声明。IE在显示网站的隐私策略时,会显示该连接,用户 点击该连接后IE就会新开一个窗口,并在新窗口中打开该URL,所以最好指定一个实际的URL。name就是该POLICY的名称,一个P3P文件可以包 含多个P3P声明,每个P3P声明都包含一个名字,而在第一步中<POLICY-REF>的about包含的"/w3c /policy.p3p#PrivacyPolicy"中"/w3c/policy.p3p"就是该P3P文件的URL,#后面就是所用的p3p声明。所
以务必保证二者一致,包括大小写(xml是区分大小写的)。
接下来是<DATA-GROUP>,<DATA-GROUP>下面<DATA>的ref有很多种值,其 中#business.name的值是IE在显示网站的隐私策略时,该P3P声明的名字,也就是标题。同时该标题也是一个连接,用户点击后也会打开一个新 窗口,URL就是#business.contact-info.online.uri的值,通常就是网站的域名。 而#business.contact-info.online.email相当于联系用的email.
另一个比较重要的是<DISPUTES-GROUP>下<DISPUTES>的service和short-description。IE在显示网站的隐私策略时,最后会显示"这个网站如何处理有关收集的信息的争议?",相当于用户在不满意该P3P声明时怎么处 理。short-description就是你想显示的文字,而service则是用户点击该文字后IE的所打开的新窗口的URL。比如你可以将short-description值设置成"请联系我们",然后service设置成网站的contact页面。那么用户看到的将是
这个网站如何处理有关收集的信息的争议?
请联系我们
用户点击后就转到contact页面。
该P3P文件的其他部分保持不变就可以了。有兴趣的自己到网上去查解释吧。
改好后保存。
再次提醒,请保持第一步中的p3p.xml中<POLICY-REF>的about和本P3P文件的文件名,URL路径,<POLICY>的name值一致。
第三步,完成前面两步后表示我们的网站已经具备了P3P,但是用户在浏览网站时,他的IE又如何知道该网站有P3P呢?所以我们还要通过IIS告诉IE网站的P3P在哪。通过设置网站的HTTP头可以达到这一目的。具体操作如下:
打开IIS后查看网站的属性,选择"HTTP头",在"自定义HTTP头"中点击"添加..."按钮,在弹出的对话框中,"自定义头名称"和"自定义头值"分别填上
P3P
和
CP="IDC DSP COR NID CUR OUR NOR" policyref="/w3c/p3p.xml"
。然后按确定应用保存。
上面的HTTP头值中的CP是简洁策略(Compact Policy)的缩写,其值由一些3字母缩写组成。这些3字母缩写的含义有兴趣的请参考W3C网站。不知道如何设置的保持上面就可以了。而policyref就是指定p3p声明的位置。在这个例子中就是/w3c/p3p.xml。
好了,现在打开IE,浏览一下这个"第三方"网站,在IE菜单栏上选"查看",点击"隐私报告...",选择一个该网站的页面,然后点击"摘要"。如果没有问题的话,就可以看到P3P声明了。
其它参考资料:
通过设置P3P头来实现跨域访问COOKIE
http://blog.csdn.net/mybluesky1983/article/details/7015760
以下是转载的内容:
背景介绍
我所在的公司是一个集团公司,在国内外有若干个分公司和办事处,每个分公司都有一个局域网,另外公司总部还负责维护着一个Internet网站。各个分公 司内部局域网都使用同一套B/S结构的业务操作系统,同时Internet网站上还有一套业务跟踪系统,也是B/S结构。两者都使用ASP开发。现在因为 业务需要,要在内部的业务操作系统中和Internet的业务跟踪系统交互。由于两个系统都是B/S结构,而且界面也很相似,为了防止操作人员工作时混淆 (将内部业务数据发布到Internet业务跟踪系统上),技术主管决定将Internet跟踪系统使用<IFRAME>内嵌在内部业务系统
的一个特定asp文件中。
两边的开发工作很快结束。但在将Internet跟踪系统内嵌进内部业务系统后却无法实现Internet跟踪系统的登录。原因很快找到--因为IE 6的增强安全机制,通过<IFRAME>内嵌一个三方网页时,缺省设置不允许使用该第三方的cookie。不允许使用cookie就意味着无 法使用Session。没有Session自然无法登录。
该问题的解决也很简单,只要在IE的Internet选项--》隐私--》高级中将"覆盖自动cookie处理"选中,然后选择接受第一方cookie和接受第三方cookie即可。
但是,这一解决方法被技术主管否决,理由是对一个连设置IE主页都需要指导的操作人员,要其更改IE的隐私策略预计将是一件非常困难的事。而且各分公司分 散在各地,使用B/S系统就是为了方便维护和更新,如果系统更新涉及客户端,那就难免会有遗漏和延迟。就算能够准时准确的更新,公司的电脑也会有淘汰和重 装操作系统的时候,我们不可能要求操作人员记住每次电脑重装后还要检查IE的隐私策略是否正确。
在修改IE隐私策略这条路堵死以后,我将目光定位于IE隐私策略的声明上,默认的IE隐私策略设置为中,具体设置包括“阻止没有合同隐私策略的第三方cookie”。那么如果有"合同隐私策略"是否就行了呢?通过Google得知这就是P3P(Platform. for Privacy Preferences)。接下来就是如何设置网站的P3P了。经过一番摸索,总算对P3P有了一点眉目。中间过程就不废话了,这里只告诉大家具体怎么操 作。如果有人对P3P有兴趣,请参考
P3P的官方网站http://www.w3.org/P3P/
P3P三步曲
第一步,在目标网站(就是你希望将其嵌入<IFRAME>的第三方网站,在这个例子中就是公司的Internet网站)的根目录下建立一个名 为w3c的目录,名字其实无所谓,但是下面的例子中都是用/w3c做路径,所以在你看完这篇文章前请照做。在其下建立一个名为p3p.xml的文件,该文 件相当于一个目录,用来声明网站使用了哪些P3P文件。具体文件内容如下:
<META. xmlns="http://www.w3.org/2002/01/P3Pv1"> <POLICY-REFERENCES> <POLICY-REF about="/w3c/policy.p3p#PrivacyPolicy"> <INCLUDE>/*</INCLUDE> <COOKIE-INCLUDE/> </POLICY-REF> </POLICY-REFERENCES> </META>
其中<META>的xmlns是xml的名称空间声明,除非P3P标准发生变化,否则固定不变。<POLICY-REF>的about便是完整的P3P文件定位。其下的<INCLUDE>用来指定该P3P文件适用的范围。相应的,不适用的范围 用<EXCLUDE>指定。值/*表示根目录下的所有文件(含目录)。写过ASP.net的配置文件的人对/*这种写法一定不陌生^_^。<COOKIE-INCLUDE>表示该P3P文件适用于cookie。因此,完整的含义就是该P3P文件对网站根目录下的所有文件 和cookie都适用。如果网站有多个P3P文件,每个P3P文件适用不同的目录,那么只要设定多个<POLICY-REF>,并指定每
个<POLICY-REF>的<INCLUDE>和<EXCLUDE>即可。
第二步,同样是在w3c目录下,建立一个名为policy.p3p的文件,该文件也是一个xml文件,具体内容如下(这个例子来源于http://www.bravenet.com/w3c/policy.p3p,仅做学习参考使用,该文件版权归www.bravenet.com所有,任何人不经www.bravenet.com同意不得以商业目的复制,传播,销售该文件):
<?xml version="1.0"?> <POLICIES xmlns="http://www.w3.org/2002/01/P3Pv1"> <!-- Generated by IBM P3P Policy Editor version Beta 1.10 built 2/19/02 2:42 PM --> <!-- Expiry information for this policy --> <EXPIRY max-age="604800"/> <POLICY discuri="http://www.bravenet.com/global/privacy.php" name="PrivacyPolicy"> <!-- Description of the entity making this policy statement. --> <ENTITY> <DATA-GROUP> <DATA ref="#business.contact-info.online.email">support@bravenet.com</DATA> <DATA ref="#business.contact-info.online.uri">http://www.bravenet.com</DATA> <DATA ref="#business.name">Bravenet Web Services</DATA> </DATA-GROUP> </ENTITY> <!-- Disclosure --> <ACCESS><nonident/></ACCESS> <!-- Disputes --> <DISPUTES-GROUP> <DISPUTES resolution-type="service" service="http://bravenet.supportclient.com" short-description="New Dispute"> <LONG-DESCRIPTION>Please contact our support department if you have any problems.</LONG-DESCRIPTION> <REMEDIES><correct/></REMEDIES> </DISPUTES> </DISPUTES-GROUP> <!-- Statement for group "Basic information" --> <STATEMENT> <EXTENSION ptional="yes"> <GROUP-INFO xmlns="http://www.software.ibm.com/P3P/editor/extension-1.0.html" name="Basic information"/> </EXTENSION> <!-- Consequence --> <CONSEQUENCE>Data collected from all Web users: access logs, and search strings (if entered).</CONSEQUENCE> <!-- Use (purpose) --> <PURPOSE><admin/><develop/></PURPOSE> <!-- Recipients --> <RECIPIENT><ours/></RECIPIENT> <!-- Retention --> <RETENTION><stated-purpose/></RETENTION> <!-- Base dataschema elements. --> <DATA-GROUP> <DATA ref="#dynamic.clickstream"/> <DATA ref="#dynamic.http"/> </DATA-GROUP> </STATEMENT> <!-- Statement for group "Cookies" --> <STATEMENT> <EXTENSION ptional="yes"> <GROUP-INFO xmlns="http://www.software.ibm.com/P3P/editor/extension-1.0.html" name="Cookies"/> </EXTENSION> <!-- Consequence --> <CONSEQUENCE>Cookies are used to track visitors to our site, so we can better understand what portions of our site best serve you.</CONSEQUENCE> <!-- Use (purpose) --> <PURPOSE><admin/><develop/></PURPOSE> <!-- Recipients --> <RECIPIENT><ours/></RECIPIENT> <!-- Retention --> <RETENTION><stated-purpose/></RETENTION> <!-- Base dataschema elements. --> <DATA-GROUP> <DATA ref="#dynamic.cookies" ptional="yes"><CATEGORIES><state/></CATEGORIES></DATA> </DATA-GROUP> </STATEMENT> <!-- End of policy --> </POLICY> </POLICIES>
由此可以看出P3P的设置还是很繁琐的。所以一些公司已经开发P3P的编辑工具。像这个例子就是由IBM P3P Policy Editor生成的。其实如果你像我一样仅仅为了覆盖IE的cookie设置,完全不必下载那些编辑工具,只要将这份文件中的几个关键位置修改一下即可 (其实我就是这么做的^_^)。
废话少说,该P3P文件中几个关键的地方包括:
<POLICY>下的discuri,其值是一个URL,用于指定网站的完整隐私政策声明。IE在显示网站的隐私策略时,会显示该连接,用户 点击该连接后IE就会新开一个窗口,并在新窗口中打开该URL,所以最好指定一个实际的URL。name就是该POLICY的名称,一个P3P文件可以包 含多个P3P声明,每个P3P声明都包含一个名字,而在第一步中<POLICY-REF>的about包含的"/w3c /policy.p3p#PrivacyPolicy"中"/w3c/policy.p3p"就是该P3P文件的URL,#后面就是所用的p3p声明。所
以务必保证二者一致,包括大小写(xml是区分大小写的)。
接下来是<DATA-GROUP>,<DATA-GROUP>下面<DATA>的ref有很多种值,其 中#business.name的值是IE在显示网站的隐私策略时,该P3P声明的名字,也就是标题。同时该标题也是一个连接,用户点击后也会打开一个新 窗口,URL就是#business.contact-info.online.uri的值,通常就是网站的域名。 而#business.contact-info.online.email相当于联系用的email.
另一个比较重要的是<DISPUTES-GROUP>下<DISPUTES>的service和short-description。IE在显示网站的隐私策略时,最后会显示"这个网站如何处理有关收集的信息的争议?",相当于用户在不满意该P3P声明时怎么处 理。short-description就是你想显示的文字,而service则是用户点击该文字后IE的所打开的新窗口的URL。比如你可以将short-description值设置成"请联系我们",然后service设置成网站的contact页面。那么用户看到的将是
这个网站如何处理有关收集的信息的争议?
请联系我们
用户点击后就转到contact页面。
该P3P文件的其他部分保持不变就可以了。有兴趣的自己到网上去查解释吧。
改好后保存。
再次提醒,请保持第一步中的p3p.xml中<POLICY-REF>的about和本P3P文件的文件名,URL路径,<POLICY>的name值一致。
第三步,完成前面两步后表示我们的网站已经具备了P3P,但是用户在浏览网站时,他的IE又如何知道该网站有P3P呢?所以我们还要通过IIS告诉IE网站的P3P在哪。通过设置网站的HTTP头可以达到这一目的。具体操作如下:
打开IIS后查看网站的属性,选择"HTTP头",在"自定义HTTP头"中点击"添加..."按钮,在弹出的对话框中,"自定义头名称"和"自定义头值"分别填上
P3P
和
CP="IDC DSP COR NID CUR OUR NOR" policyref="/w3c/p3p.xml"
。然后按确定应用保存。
上面的HTTP头值中的CP是简洁策略(Compact Policy)的缩写,其值由一些3字母缩写组成。这些3字母缩写的含义有兴趣的请参考W3C网站。不知道如何设置的保持上面就可以了。而policyref就是指定p3p声明的位置。在这个例子中就是/w3c/p3p.xml。
好了,现在打开IE,浏览一下这个"第三方"网站,在IE菜单栏上选"查看",点击"隐私报告...",选择一个该网站的页面,然后点击"摘要"。如果没有问题的话,就可以看到P3P声明了。
其它参考资料:
通过设置P3P头来实现跨域访问COOKIE
http://blog.csdn.net/mybluesky1983/article/details/7015760
相关文章推荐
- P3P 跨域访问第三方cookie的解决方案 适合解决UC的同步登录问题
- 用P3P header解决iframe跨域访问cookie的问题
- 使用p3p简洁策略解决第三方跨域cookie问题
- 用P3P header解决iframe跨域访问cookie(转) Iframe session失效
- 用P3P header解决iframe跨域访问cookie
- iframe 跨域访问session/cookie丢失问题解决方法
- IE下iframe第三方网页跨域不能写cookie问题的解决方法
- 用P3P header解决iframe跨域访问cookie
- P3P解决cookie存取的跨域问题
- iframe 跨域访问session/cookie丢失问题解决方法
- 解决IE浏览器中Iframe跨域访问不能读写cookie问题
- 用P3P header解决IE下iframe跨域访问时候session丢失的问题
- 用P3P header解决IE下iframe跨域访问时候session丢失的问题
- PHP的header("P3P: CP=CURa……")解决Cookie跨域问题
- 用P3P header解决iframe跨域访问cookie(转)
- [转]P3P解决cookie存取的跨域问题
- 解决js跨域访问问题JSONP,不支持同步调用
- 用P3P header解决IE下iframe跨域访问时候session丢失的问题
- 用P3P header解决iframe跨域访问cookie/session
- 用P3P header解决iframe跨域访问cookie