Session 失效緣由

轉載http://blog.csdn.net/LLorJJ999/article/details/4107464javascript

 

昨天去GTSC面試,有面試官問我關於Session丟失以後怎麼查的問題,說老實話,開發到如今不多碰到這樣的狀況,惟一想到的就是Session超時,還有就是作Session讀寫日誌,發覺面試官聽了以後不是很滿意,汗!

無論怎麼說,是個學習的好機會,今天抽空查了一下網上關於這些問題的處理方法,總結一下,但願對你們有所幫助。

順便提一下asp中Session的工做原理:
asp的Session是具備進程依賴性的。ASP Session狀態存於IIS的進程中,也就是inetinfo.exe這個程序。因此當inetinfo.exe進程崩潰時,這些信息也就丟失。另外,重起或者關閉IIS服務都會形成信息的丟失。

asp.net Session的實現
asp.net的Session是基於HttpModule技術作的,HttpModule能夠在請求被處理以前,對請求進行狀態控制,因爲Session自己就是用來作狀態維護的,所以用HttpModule作Session是再合適不過了。

緣由1:
bin目錄中的文件被改寫,asp.net有一種機制,爲了保證dll從新編譯以後,系統正常運行,它會從新啓動一次網站進程,這時就會致使Session丟失,因此若是有access數據庫位於bin目錄,或者有其餘文件被系統改寫,就會致使Session丟失

緣由2:
文件夾選項中,若是沒有打開「在單獨的進程中打開文件夾窗口」,一旦新建一個窗口,系統可能認爲是新的Session會話,而沒法訪問原來的Session,因此須要打開該選項,不然會致使Session丟失html

參考配置:java

http://jingyan.baidu.com/article/22fe7ced78594f3002617f04.htmlweb


緣由3:
彷佛大部分的Session丟失是客戶端引發的,因此要從客戶端下手,看看cookie有沒有打開

緣由4:
Session的時間設置是否是有問題,會不會由於超時形成丟失

緣由5:
IE中的cookie數量限制(每一個域20個cookie)可能致使session丟失

緣由6:
使用web garden模式,且使用了InProc mode做爲保存session的方式

解決丟失的經驗
1. 判斷是否是緣由1形成的,能夠在每次刷新頁面的時候,跟蹤bin中某個文件的修改時間
2. 作Session讀寫日誌,每次讀寫Session都要記錄下來,而且要記錄SessionID、Session值、所在頁面、當前函數、函數中的第幾回Session操做,這樣找丟失的緣由會方便不少
3. 若是容許的話,建議使用state server或sql server保存session,這樣不容易丟失
4. 在global.asa中加入代碼記錄Session的建立時間和結束時間,超時形成的Session丟失是能夠在SessionEnd中記錄下來的。
5. 若是有些代碼中使用客戶端腳本,如javascript維護Session狀態,就要嘗試調試腳本,是否是由於腳本錯誤引發Session丟失面試

相關文章
相關標籤/搜索