IE瀏覽器跨域訪問iframe 中 Cookie/Session丟失解決方案

偶然中發現一個IE瀏覽器的問題:
        站點aa.com的頁面a.aspx中存在一個iframe,iframe的src爲站點bb.com的b.aspx。b.aspx設置了一個COOKIE(不管臨時保存還是長期保存),然後刷新aa.com/a.aspx,bb.com/b.aspx也會被刷新,這時候會發現第二次向bb.com/b.aspx的請求裏面並沒有帶入第一次設置的COOKIE。
     更確切地說:IE瀏覽器丟掉了框架中不同域的COOKIE。

    查看瀏覽器的隱私選項,默認是“中”。現在把隱私的等級修改成“低”,再次做上面的測試,然後發現框架中的COOKIE可以被帶入了。
   從這個現象來看,應該是IE出於安全考慮而做了限制。但是!!!處於不同的兩個域的的頁面,應該被看成打開了兩個互不相關的瀏覽器窗口,大家各自設置自己的COOKIE,各自帶入到下次請求中,只要互不影響,不應該受到限制。
      恩,那麼,爲什麼要限制呢?看來還是微軟的程序員對自己瀏覽器的安全沒什麼信心,擔心同一瀏覽器窗口不同域的情況下,黑客仍可能獲取另一域的COOKIE,所以乾脆把其中一個域的COOKIE幹掉!!!人家FireFox爲什麼就沒這種限制?

===========================================================================

問題根源:

IE6/IE7支持的P3P(Platform for Privacy Preferences Project (P3P) specification)協議默認阻止第三方無隱私安全聲明的cookie,Firefox目前還不支持P3P安全特性,firefox中自然也不存在此問題了。Mircosoft對此的具體描述可以參見Privacy in Internet Explorer 6

解決方法:

很簡單,在要嵌入的內容中(iframe指向的站點)輸出P3P的主機頭聲明,步驟如下(Session variables are lost if you use FRAMESET in Internet Explorer 6):

1.打開IIS管理器 inetmgr
2.選擇被嵌入iframe源站點或者目錄,右鍵點擊打開屬性框
3.切換到HTTP頭
4.添加
5.自定義HTTP頭名: P3P
6.自定義HTTP頭值: CP="CAO PSA OUR"
7.關閉屬性框退出,即刻生效
至於上面CAO PSA OUR的具體意思,還是請參考前面的文章:Privacy in Internet Explorer 6

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