PHP不同域名cookie共享(單點登錄實現原理)


PHP使用P3P完成COOKIE跨域操作
實際實用中,類似的需求有,比如說我們有兩個域名,我們想實現在一個域名登錄后,能自動完成另一個域名的登錄,也就是單點登錄(SSO)功能。
為了測試的方便,先編輯hosts文件,加入測試域名

sudo vim /etc/hosts

192.168.1.112 www.a.com

192.168.1.112 www.b.com

代碼實現

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
會發現a.com域上已經有cookie值了

代碼分析
在www.b.com的域名下給www.a.com創建cookie。
若用戶登錄到www.b.com中,由此域名的b_setcookie.html中js實現方式給www.a.com域名設置cookie。
假設www.a.com域名下的a_getcookie.php有cookie則設定www.a.com登錄成功。

b_setcookie.html:

<script src="http://www.a.com/a_setcookie.php?id=www.b.com"></script>

總結P3P的在上述代碼中最主要的職責是:

跨域產生 cookie

注:上述代碼在非IE下測試,即使不發送P3P頭信息,也能成功。IE瀏覽器必需發送P3P才能成功!所以要跨域產生cookie還是有必要發送P3P的,畢竟IE的用戶群體還是很大的。

參考:

http://my.oschina.net/goal/blog/199978


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM