PHP使用P3P完成COOKIE跨域操作
实际实用中,类似的需求有,比如说我们有两个域名,我们想实现在一个域名登录后,能自动完成另一个域名的登录,也就是单点登录(SSO)功能。
为了测试的方便,先编辑hosts文件,加入测试域名
sudo vim /etc/hosts
192.168.1.112
192.168.1.112
代码实现
域名下的代码文件:[a_setcookie.php]
<?php
//header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');
setcookie("test", $_GET['id'], time()+3600, "/", ".");
?>[a_getcookie.php]
<?php
var_dump($_COOKIE);
?>
域名下的代码文件:[b_setcookie.php]
<?php
//header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');
setcookie("test", $_GET['id'], time()+3600, "/", ".");
?>
[b_getcookie.php]
<?php
var_dump($_COOKIE);
?>
依次访问
/b_setcookie.php
/a_getcookie.php
会发现域上已经有cookie值了
代码分析
在的域名下给创建cookie。
若用户登录到中,由此域名的b_setcookie.html中js实现方式给域名设置cookie。
假设域名下的a_getcookie.php有cookie则设定登录成功。
b_setcookie.html:
<script src="/a_setcookie.php?id="></script>
总结P3P的在上述代码中最主要的职责是:
跨域产生 cookie
注:上述代码在非IE下测试,即使不发送P3P头信息,也能成功。IE浏览器必需发送P3P才能成功!所以要跨域产生cookie还是有必要发送P3P的,毕竟IE的用户群体还是很大的。
参考:
/goal/blog/199978