前段時間碰到一個問題,就是在IE下,使用iFrame嵌入頁面時,該頁面的會話級別的cookie沒法寫入,致使服務端始終沒法獲取JSESSIONID,每次都是產生一個新的,使得Session沒法使用。php
只須要設置 P3P HTTP Header,在隱含 iframe 裏面跨域設置 cookie 就能夠成功。ASP直接在頭部加了頭部申明,測試有效。
<%Response.AddHeader "P3P", "CP=CAO PSA OUR"%>html
PHP的話,應該是以下寫法:
header('P3P: CP=CAO PSA OUR');跨域
ASP.NET的話
經過在代碼上加Response.AddHeader("P3P", "CP=CAO PSA OUR")或者在Window服務中將ASP.NET State Service 啓動。瀏覽器
JSP:
response.setHeader("P3P","CP=CAO PSA OUR")服務器
1、關於IE6 IFrame或Frame中讀寫cookie的問題分析cookie
IE6加入了以PlatformforPrivacyPreferences(P3P)爲基礎的 隱私保護功能,有關此功能的說明請參閱「」asp.net
在ie6中Cookie被分紅了first party cookie和third party cookie,即第一方Cookie和第三方Cookie,所謂的第三方Cookie是指在Frame或者Iframe中嵌套頁面的Cookie。dom
當第三方站點試圖讀寫cookie時,IE6就會自動攔截(在狀態欄下顯示紅色禁止圖標)jsp
在IE下是不能在IFrame中設置cookie的,在FF下能夠,在HTTP 標頭加入P3P後,便可解決該問題。編輯器
2、P3P
P3P是萬維網聯盟(W3C)公佈的一項隱私保護推薦標準,旨在爲網上衝浪的Internet用戶提供隱私保護。如今有愈來愈多的網站在消費者訪問時,都 會收集一些用戶信息。制定P3P標準的出發點就是爲了減輕消費者因網站收集我的信息所引起的對於隱私權可能受到侵犯的憂慮。P3P標準的構想是:Web 站點的隱私策略應該告之訪問者該站點所收集的信息類型、信息將提供給哪些人、信息將被保留多少時間及其使用信息的方式,如站點應作諸如 「本網站將監測您所訪問的頁面以提升站點的使用率」或「本網站將盡量爲您提供更合適的廣告」等申明。訪問支持P3P網站的用戶有權查看站點隱私報告,然 後決定是否接受cookie或是否使用該網站。
訪問官方P3P網頁以獲取更多技術信息:http://www.w3.org/P3P。
3、相關技術文章
4、「官方」的解決方法
看完了第三節的文章你會發現,所謂P3P策略實際就是一個部署在Web服務器上的簡單XML文件,指明網站打算使用哪些cookie以及派什麼用途。這個XML文件相似這種格式
<META xmlns="http://www.w3.org/2000/12/P3Pv1">
<POLICY-REFERENCES>
<POLICY-REF about="/P3P/Policy1.xml">
<COOKIE-INCLUDE
name="*"
value="*"
domain="*"
path="*"/>
</POLICY-REF>
</POLICY-REFERENCES>
</META>
能夠使用IBM的P3P策略編輯器IBM's P3P Policy Editor來編寫這個文件。
三種部署方式:
1 Well-Know location
/w3c/p3p.xml
將P3P Reference File檔案改名爲p3p.xml,並放置在/w3c目錄當中
2 HTTP 頭
P3P:policyref="http://www.mysite.com/w3c/p3p.xml" CP="ALL DSP COR NID CUR OUR IND PUR"
CP是由3字符代碼組成的列表(相關信息已經在W3C網站上進行了說明)。在上例中,該網站不按期地(INDefinite)爲OUR公司收集購買商品項 目(PURchasing)或完成當前活動(CURrent)的有關數據。有疑問(DiSPutes)、不可識別(Nonidentifiable)的數 據做爲cookie存儲(NID)。因爲咱們的網站以cookie的方式存儲客戶號,因此NID應該從列表中刪除。
CP應該匹配完整的策略;所以,若是你在CP中使用了NID,那麼你應該在你的策略文件中包括<nonident/>標籤。爲了匹配這些設置 而在下一節介紹的校驗工具會對以上代碼進行檢查,若是有差別的話,Internet Explorer 6.0瀏覽器也會檢查策略文件而且令策略文件無效
若是是asp/asp.net/jsp/php等動態頁面,也能夠添加相似如下代碼:
response.setHeader("P3P","policyref="http://www.mysite.com/w3c/p3p.xml" CP="ALL DSP COR CUR OUR IND PUR"");
3 在HTML內容中嵌入Link標籤
<link rel="P3Pv1" href="/w3c/p3p.xml"></link>