<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");