P3P是什么
P3P是一种被称为个人隐私安全平台项目(the Platform for Privacy Preferences)的标准,能够保护在线隐私权,使Internet冲浪者可以选择在浏览网页时,是否被第三方收集并利用自己的个人信息。如果一个站点不遵守P3P标准的话,那么有关它的Cookies将被自动拒绝,并且P3P还能够自动识破多种Cookies的嵌入方式。p3p是由全球资讯联盟网所开发的。
其实P3P并没有成为标准,只是一种规范,大家都在遵守这个规范来行事而已。
应用场景
1. 跨域共享 Cookie ;
2. 跨域共享 Session ;
演示 - 跨域共享Cookie
演示站点有两个:haoren.com为当前站点、huaidan.com为第三方站点。假设haoren.com站点下有一个P3P-Test.html,代码如下:
P3P Test
可以看到里面的iframe指向了一个第三方站点huaidan.com的setCookie.php页,代码如下:
Set Cookie
代码的意思很简单就是设置一个名为UserName的Cookie。
然后在huaidan.com这个第三方站点下还有一个getCookie.php页面。代码如下:
Get Cookie
意思就是获取一个名为UserName的Cookie并打印到页面上。
重点上演了:
我们访问 http://haoren.com/P3P-Test.html 后,再访问第三方站点的 http://huaidan.com/getCookie.php 发现没有获取到 Cookie。可是 IFrame 明明调用了http://huaidan.com/setCookie.php页面设置了Cookie。其实是因为 haoren.com 和 huaidan.com 代表的是两个域,它们的 Cookie 信息是不能共享的。这个时候我们用上 P3P 了。使用的时候很简单,在 setCookie.php 页面设置 Cookie 之前加上一段设置P3P的代码,完整代码如下:
此步设置后。再按如上顺序访问一次发现 Cookie 设置成功了。
小结
这个问题也就是大家常说的"IFrame 跨域问题"。接下来可以想到 Session 跨域问题。其实道理是一样。