您的位置 首页 php

单点登录解决方案:P3P协议实现跨域Cookie设置

P3P(Platform for Privacy Preferences)是 W3C 公布的一项隐私保护推荐标准,以为用户提供隐私保护。 P3P标准的构想是:Web 站点的隐私策略应该告之访问者该站点所收集的信息类型、信息将提供给哪些人、信息将被保留多少时间及其使用信息的方式,如站点应做诸如 “本网站将监测您所访问的页面以提高站点的使用率”或“本网站将尽可能为您提供更合适的广告”等申明。访问支持P3P网站的用户有权查看站点隐私报告,然后决定是否接受 Cookie 或是否使用该网站。

有别于JS跨域、IFRAME跨域等的常用处理办法,通过发送P3P头信息而实现的跨域。

原理

P3P协议可以完成cookie的跨域设置,例如在A域下请求B域的某个方法,B域上加载此协议后可以实现通过A域的请求完成cookie设置,当然此cookie的域肯定是B域的。说的简单些就是A域的cookie只能是在A域下设置,再怎样也做不到在A域下设置一个B域的cookie,但可以通过A域向B域发送一个跨域请求,B域响应此请求,虽然此请求来至A域,在某些情况下(IE大法)依旧无法完成cookie的设置,但在P3P协议的帮助下,即B域上运行着P3P协议,就可以完美的接收来至任何他域的请求来设置cookie了(再次强调,B域的cookie只能在B域下设置,若A域下就能设置B域的cookie先不说SOP协议当然无存,还没事折腾什么跨域)。

PHP 使用P3P协议

header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');
 

JS使用P3P协议

 xmlhttp .setRequestHeader( "P3P" , 'CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"' );
 

实现案例

www.b.com/set_cookie.php 在b域名下设置a域名的cookie:

<script src=""></script>
 

www.a.com/get_cookie.php 在a域名下获取cookie:

print_r($_COOKIE);
 

www.a.com/set_cookie.php 在a域名下设置a域名的cookie:

header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');
setcookie("test", "test value", time()+3600, "/");
 

访问www.b.com/set_cookie.php,然后访问www.a.com/get_cookie.php就可以获取cookie

其实,在 chrome 不用P3P头也可以获取到cookie,但是IE不行,加上P3P头,IE也可以了。

文章来源:智云一二三科技

文章标题:单点登录解决方案:P3P协议实现跨域Cookie设置

文章地址:https://www.zhihuclub.com/152612.shtml

关于作者: 智云科技

热门文章

网站地图