iframe中的session失效問題的解決

     在開發web程序時,常常把自己開發的前臺程序放到一個大的portal中,在portal 的頁面中採用iframe嵌套我的前臺頁面(用frameset是一樣的),但採用這種方法時有時會出現在我的前臺頁面中所需要的session實效了(單獨跑前臺程序是沒有任何問題的),google了一下也沒有太清楚的解釋和解決方法。

    其實之所以出現這種情況是我們一般採用IE6作爲瀏覽器(IE7和firefox沒有這個問題),而IE6它的安全策略默認是會把iframe中的頁面站點認爲是不可信任的,它會阻止該站點傳過來的cookie(如果你在iframe中的URL跳轉是用的localhost,則不會被阻擋),所以因爲沒法使用cookie了,session便實效了。其實這裏還是有個小問題的,因爲在j2ee中的session是靠cookie或url重寫來維持的,如果cookie不能用了,因該是自動採用url重寫來維持住session,不知爲什麼沒有自動採用後者。

   解決這種問題的方法有兩個,一個是在IE中設置允許iframe中的站點的cookie,另一個就是在程序中手動的對所有的action或鏈接的url全部採用url重寫,即response.encodeURL(...........)。當然如果cookie可以使用,這樣寫並不會在url中加上jsessionid。

     這裏還有一點要注意,就是當在採用在程序中都顯示的使用url重寫處理鏈接時,我在會話過程中不能超鏈到web-inf外面的一個頁面中去,也就是說不經過action的處理直接鏈接到一個頁面,這樣的話,session也會實效的,原因是當我自己鏈接到一個頁面中,我傳過去的jsessionid,它個頁面它不會處理的,當然也就不會回傳給我了,它會回傳給我個新的jsessionid,這樣我的前一個會話就中斷了,所以我所有的鏈接到要過服務器,走action的處理(這裏的action指的是類似於struts中的action之類的servlet處理),這樣jsessionid才能回傳回來。

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