在框架中(IFRAME)傳遞SESSION的解決方案

轉自:http://hi.baidu.com/bulebabyer/blog/item/de54230131bafade277fb5e7.html

 

一. 問題根源:

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

至此,iframe框架下session丟失的問題才徹底解決。

三. 其他

在開發中,我們經常會遇到使用Frame來工作,而且有時是爲了跟其他網站集成,應用到多域的情況下,而Iframe是不能保存Session的。因此,網上可以找到很多相關的文章,如果網站可以採用設置Web.Config中的配置:<sessionState
mode="StateServer"
stateConnectionString="tcpip=127.0.0.1:42424"
sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes"
cookieless="false"
timeout="40"
/>
把cookieless="false"改成"true"就可以了。但也同樣有個小問題,就是如果頁面中採用Javascript的 window.location.href=''這樣的方式來重定向的話,系統會認爲這是另一個新的請求,產生一個新的SessionId,導致原 Session同樣的丟失。所以對於重定向,還是使用Response.Redirect()爲好。

除了Ifrmae有丟Session問題外,frameset也有同樣的問題。Frameset的問題更不移定,是有時會丟,有時不會丟,這更認人頭痛,在網上找到了一個方法,在頁面page_onload裏添加一語句:
Response.AddHeader("P3P","CP=CAO PSA OUR");
FrameSet中的Session丟失問題就解決了。

這種辦法同(二)應該是一個道理.

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