眾所周知Session cookie被廣泛用來做瀏覽器使用者身份校正。在近期的項目測試中就遇到一個相關的問題,發現在兩不同的IE8視窗裡面並以兩個不同使用者身份分別登入後,前面登入的使用者頁面會在第二個使用者登入以後重新整理成第二個使用者資訊頁面,但是在IE6瀏覽器下測試是好的,並未發現類似問題。
查了整個項目中session設定的地方,並未發現問題。最後分析是session被瀏覽器共用了,於是網上查了IE8和IE7的區別,發現相比IE7, IE8的Session管理有很大變化,這是Web開發人員需要注意的:
IE7中,同一個視窗(IE 進程)共用一個session。
IE8中,所有開啟的IE視窗(IE 進程)共用一個session。除非,使用者通過菜單 File > New session 開啟新視窗,或者使用命令列參數 iexplore.exe -nomerge 來開啟IE。 另外,當所有IE視窗被關閉後,session 結束。
這個問題的關鍵是,cookie在不同的IE進程間是否共用,有些COOKIE是完全共用的,有的範圍只能局限於單個進程。因為cookie中儲存著你的sessionid它被伺服器用來決定是否應該產生的新的session。
Session預設情況下是以cookie記憶體儲的sessionId作為識別標誌,而cookie在瀏覽器之間獨立的。所以如果是同一個瀏覽器不管開多少個視窗,都只有一個Session。
解決在IE8瀏覽器中測試時session共用問題:
1、在IE8的捷徑的目標欄中添加-nomerge,再開啟IE時就不會共用同一個session了。
2、使用命令列參數 iexplore.exe -nomerge 來開啟IE。
在我們的測試環境中,常常同時要用不同身份連上同一台Web Server。之前使用IE7/IE6時,只要另外開一個IE連上同一網站,IE每次都會跳出來問帳號密碼,因此可做到每個IE各用不同身份登入的效果。
IE8做了一些改變,讓多個Tab或多個IE視窗共用一個Process,以節省資源,改善效能。但副作用是,當你在一台Web完成登入後,之後再開Tab、甚至另開IE連上同一網站,都會共用相同的Session。這意味著另開Tab或另開的IE都會承襲先前登入的身份、接續剛才的Session,如此下來,等同被剶奪一人分飾多角的能力。