天天看點

IFrame引用跨域站點頁面時,Session失效問題解決

<script type="text/javascript"></script> 問題場景:

   在一個應用(集團門戶)的某個page中, 通過IFrame的方式嵌入另一個應用(集團實時監管系統)的某個頁面. 當兩個應用的domain 不一樣時, 在被嵌入的頁面中Session失效。(session基于cookie實作,引用頁不允許使用cookie).

問題分析: 

      IE6/IE7從安全性角度考慮,支援的P3P(Platform for Privacy Preferences Project (P3P) specification)協定預設阻止第三方無隐私安全聲明的cookie,Firefox目前還不支援P3P安全特性,firefox中自然也不存在此問題了。

解決方案:

   1. 修改Client的設定

    使Client可以接受來自任何網站的Cookie(具體設定在IE選項的隐私頁中, 将B站點加入到受信任的站點)

   或者将兩個domain都設定為受信任站點

   2. 應用的domain修改

    簡單方案: 兩個應用使用同一個domain   

    複雜方案: 可以在iframe加載的頁面裡通過setdomain來強制更改 

   3. P3P

   第一種: 在要嵌入的内容中(iframe指向的站點)輸出P3P的主機頭聲明,  步驟如下:

> 打開IIS管理器 inetmgr

> 選擇被嵌入iframe源站點或者目錄,右鍵點選打開屬性框

> 切換到HTTP頭

> 添加

> 自定義HTTP頭名: P3P

> 自定義HTTP頭值: CP="CAO PSA OUR"

> 關閉屬性框退出,即刻生效

   第二種: 在被嵌入頁面page_onload裡添加一語句:Response.AddHeader("P3P","CP=CAO PSA OUR");

繼續閱讀