萬惡的IE安全設置問題,估計讓不少人為之糾結,最近項目中又被狠狠的坑了一把... 在iframe嵌入頁面中設置cookie,會發現cookie失效,取值都為空。在項目中表現為用戶登錄的登錄名稱,密碼都為空,用戶登錄信息得不到驗證,頁面直接跳轉至另一個項目的登錄頁。百度得知在IE下加入了以P3P為基礎的隱私保護功能,當第三方站點設置cookie,IE會自動攔截。 只需要設置 P3P HTTP Header,在隱含 iframe 里面跨域設置 cookie 就可以成功。
ASP直接在頭部加了頭部申明 <%Response.AddHeader "P3P", "CP=CAO PSA OUR"%>
ASP.NET的話 方法一:通過在代碼頭部加Response.AddHeader("P3P", "CP=CAO PSA OUR"),此方法已經測試,cookie設置成功。 方法二:在Window服務中將ASP.NET State Service 啟動。
JSP: response.setHeader("P3P","CP=CAO PSA OUR")
下面是對P3P及P3P策略的簡單介紹: P3P是萬維網聯盟(W3C)公布的一項隱私保護推薦標准,旨在為網上沖浪的Internet用戶提供隱私保護。現在有越來越多的網站在消費者訪問時,都 會收集一些用戶信息。制定P3P標准的出發點就是為了減輕消費者因網站收集個人信息所引發的對於隱私權可能受到侵犯的憂慮。P3P標准的構想是:Web 站點的隱私策略應該告之訪問者該站點所收集的信息類型、信息將提供給哪些人、信息將被保留多少時間及其使用信息的方式,如站點應做諸如 “本網站將監測您所訪問的頁面以提高站點的使用率”或“本網站將盡可能為您提供更合適的廣告”等申明。訪問支持P3P網站的用戶有權查看站點隱私報告,然 后決定是否接受cookie或是否使用該網站。
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來編寫這個文件