iframe 跨域訪問session/cookie丟失問題解決方法

今天因工作需要,在一個域名A的頁面中,使用iframe包含另一個域名B的頁面。在chrome,firefox測試一切正常。
當測試到IE7時,發現域名B中的頁面session失效,不能寫入session。
網上搜索後瞭解, 因爲IE有安全策略,限制頁面不保存第三方cookie(當前訪問域名A下的頁面爲第一方cookie,而域名B下的頁面爲第三方cookie)。
雖然有安全策略限制,但我們可以引入P3P聲明允許第三方收集個人信息,使第三方cookie不被拒絕。
P3P:Platform for Privacy Preferences(隱私偏好平臺)是W3C公佈的一項隱私保護推薦標準,能夠保護在線隱私權。使用Internet者可以選擇在瀏覽網頁時,是否被第三方收集並利用自己的個人信息。如果一個站點不遵守P3P標準,它的Cookies將被自動拒絕。

在iframe的頁面頭加入以下語句即可解決session失效問題。

header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');

IE iframe 跨域訪問session問題解決了,但測試後發現,即使加入了P3P,safari瀏覽器依然不能保存iframe頁面中的session。

原來safari的安全策略是,當cookie並未以第一方cookie保存過的(非iframe),將判斷爲不安全而直接拒絕。因此與IE的P3P有些不同。

解決方法如下:

首先在iframe的頁面中判斷某個session值是否存在。如果不存在,使用js修改window.top.location跳到一個本域的setSession.php頁面。

因爲是用window.top.location打開,因此並非iframe去訪問,且能以第一方cookie保存.

然後在setSession.php頁面執行完set session後,會跳回A域名的頁面。之後就能使用session而不失效了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章