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_
Response.AddHeader("P3P","CP=CAO PSA OUR");
FrameSet中的Session丟失問題就解決了。至於裏面具體的原因 也沒時間去搞懂了。

-----------------------------------------------------------------------------------------------------------------------------------------------

在實際操作中,以上設置將導致對方post過來的數據我方接收不到的問題,正確的解決方法應該是:

http://www.cnblogs.com/suxvsheng/archive/2007/08/17/860157.html

IE框架中訪問不同域的網頁不能帶入COOKIE————是IE瀏覽器的一個BUG?
偶然中發現一個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

至此,iframe框架下session丟失的問題才徹底解決。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章