PHP使用P3P完成COOKIE跨域操作
實(shí)際實(shí)用中,類似的需求有,比如說我們有兩個(gè)域名移宅,我們想實(shí)現(xiàn)在一個(gè)域名登錄后,能自動(dòng)完成另一個(gè)域名的登錄椿疗,也就是單點(diǎn)登錄(SSO)功能漏峰。
為了測試的方便,先編輯hosts文件届榄,加入測試域名
sudo vim /etc/hosts
192.168.1.112 www.a.com
192.168.1.112 www.b.com
代碼實(shí)現(xiàn)
www.a.com域名下的代碼文件:
[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.com");
?>
[a_getcookie.php]
<?php
var_dump($_COOKIE);
?>
www.b.com域名下的代碼文件:
[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.com");
?>
[b_getcookie.php]
<?php
var_dump($_COOKIE);
?>
依次訪問
http://www.b.com/b_setcookie.php
http://www.a.com/a_getcookie.php
會(huì)發(fā)現(xiàn)a.com域上已經(jīng)有cookie值了
代碼分析
在www.b.com的域名下給www.a.com創(chuàng)建cookie浅乔。
若用戶登錄到www.b.com中,由此域名的b_setcookie.html中js實(shí)現(xiàn)方式給www.a.com域名設(shè)置cookie铝条。
假設(shè)www.a.com域名下的a_getcookie.php有cookie則設(shè)定www.a.com登錄成功靖苇。
b_setcookie.html:
<script src="http://www.a.com/a_setcookie.php?id=www.b.com"></script>
總結(jié)P3P的在上述代碼中最主要的職責(zé)是:
跨域產(chǎn)生 cookie
注:上述代碼在非IE下測試,即使不發(fā)送P3P頭信息班缰,也能成功贤壁。IE瀏覽器必需發(fā)送P3P才能成功!所以要跨域產(chǎn)生cookie還是有必要發(fā)送P3P的,畢竟IE的用戶群體還是很大的埠忘。
參考: