http://www.kingmx.com/article/15061(轉)
網上看了別人介紹的一片文章,說使用P3P可以完成跨域COOKIE操作,感覺很COOL,不過沒有提供原始碼,我胡亂寫了一下,大家看看。
實際工作中,類似這樣的要求很多,比如說,我們有兩個網域名稱,我們想實現在一個網域名稱登入後,能自動完成另一個網域名稱的登入,也就是PASSPORT的功能。
我唯寫一個大概,為了測試的方便,先編輯hosts檔案,加入測試網域名稱(C:/WINDOWS/system32/drivers/etc/hosts)
127.0.0.1 www.a.com
127.0.0.1 www.b.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);
?>
最後:建立 b_setcookie.php 檔案,內容如下:
<script src="http://www.a.com/a_setcookie.php?id=www.b.com"></script>
----------------------------
三個檔案建立完畢後,我們通過瀏覽器依次訪問:
http://www.b.com/b_setcookie.php
http://www.a.com/a_getcookie.php
我們會發現,在訪問b.com域的時候,我們並沒有在a.com網域設定上cookie值。
然後我們修改一下a_setcookie.php檔案,去掉注釋符號,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");
?>
再次通過瀏覽器依次訪問:
http://www.b.com/b_setcookie.php
http://www.a.com/a_getcookie.php
這次,你會發現在訪問b.com域的時候,我們設定了a.com域的cookie值。
末了補充一句,似乎只有IE對跨域訪問COOKIE限制比較嚴格,上述代碼在FIREFOX下測試,即使不發送P3P頭資訊,也能成功。不過IE是老大啊。
參考文檔:http://www.w3.org/P3P/