在開發中,我們碰到的跨域主要還是糾結在IE,頁面中的IFRAME或者FRAME或者JS跨域的時候,IE有安全性原則限制頁面不帶cookie,但是如果我們加上P3P,就沒有這策略的限制。這也是P3P來突破跨域的可行前提,其實在firefox chorme類瀏覽器裡面是沒有這個限制的。
首先我們瞭解一下P3P是什嗎?
P3P(Platform for Privacy Preferences)是W3C公布的一項隱私保護推薦標準,以為使用者提供隱私保護。
P3P標準的構想是:Web 網站的隱私權原則應該告之訪問者該網站所收集的資訊類型、資訊將提供給哪些人、資訊將被保留多少時間及其使用資訊的方式,如網站應做諸如 “本網站將監測您所訪問的頁面以提高網站的使用率”或“本網站將儘可能為您提供更合適的廣告”等申明。訪問支援P3P網站的使用者有權查看網站隱私報告,然 後決定是否接受cookie 或是否使用該網站。
以下為php利用P3P頭實現跨網域設定cookie的執行個體:
http://www.a.com/a_setcookie.php 檔案內容:
<?php setcookie("Alixixi", $_GET['id'], time()+3600, "/", ".a.com"); ?>
http://www.a.com/a_getcookie.php 檔案內容:
<?php var_dump($_COOKIE); ?>
http://www.b.com/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
訪問1 b.com域後,我們並沒有在a.com域發現設定上cookie值。
此時如果將http://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("Alixixi", $_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值。
從上面例子可以看出通過發送P3P頭資訊而實現的跨域(在Firefox不發送P3P也能跨域成功)。
以上代碼的關鍵區段在於也即PHP使用P3P協議的代碼:
header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');
您可能感興趣的文章
- jquery操作cookie,jquery讀取cookie,jquery設定cookie,jquery刪除cookie
- php利用filter函數驗證郵箱、url和ip地址的方法
- js操作cookie,js讀取cookie,js設定cookie,js刪除cookie總結
- php利用curl實現多線程的類,php curl多線程下載圖片
- php利用正則過濾各種標籤,空格,分行符號的代碼
- PHP 利用 Curl Functions 實現多線程抓取網頁和下載檔案
- 在php中分別使用curl的post提交資料的方法和get擷取網頁資料的方法總結
- PHP如何識別是電腦或手機訪問網站