Session的生命周期


      我們已經知道,Session是在用戶第一次訪問網站的時候創建的,那么Session是什么時候銷毀的呢?

      其實,Session使用一種平滑超時的技術來控制何時銷毀Session。默認情況下,Session的超時時間(Timeout)是20分鍾,即用戶保持連續20分鍾不訪問網站,則Session被收回。如果在這20分鍾內用戶又訪問了一次頁面,那么20分鍾就重新計時了。也就是說,這個超時是連續不訪問的超時時間,而不是第一次訪問后20分鍾必過時。當然,你可以通過修改Web.config文件的配置項來調整這個超時時間,如下面的代碼所示:

<sessionState timeout="30"></sessionState>

      你同樣也可以在程序中進行設置,如下面的代碼所示:

Session.Timeout = "30";

      一旦Session超時,Session中的數據將被回收,如果你再次使用Session,將給你分配一個新的SessionID。

      不過,你可別太相信Session的Timeout屬性,如果你把它設置為24小時,則很難相信24小時之后用戶的Session還在。Session是否存在,不僅僅依賴於Timeout屬性,以下的情況都可能引起Session丟失:

      1)bin目錄中的文件被改寫。asp.net有一種機制,為了保證dll重新編譯之后,系統正常運行,它會重新啟動一次網站進程,這時就會導致Session丟失。

      2)SessionID丟失或者無效。如果你在URL中存儲SessionID,但是使用了絕對地址重定向網站導致URL中的SessionID丟失,那么原來的Session將失效。如果你在Cookie中存儲SessionID,那么客戶端禁用Cookie或者Cookie達到了IE中Cookie數量的限制(每個域20個),那么Session將無效。

      3)如果使用InProc的Session,那么IIS重啟將會丟失Session。同理,如果使用StateServer的Session,服務器重新啟動Session也會丟失。

      如果你需要遍歷當前的Session集合,你可以這樣來處理,如下面的代碼所示:

 

IEnumerator SessionEnum = Session.Keys.GetEnumerator();
while (SessionEnum.MoveNext())
{
    Response.Write(
Session[SessionEnum.Current.ToString()].ToString() 
+ "<br/>");
}

 

      有時候,我還需要立刻讓Session失效。比如用戶退出系統后,Session中保存的所有數據需要全部失效。處理方法如下面的代碼所示:

Session.Abandon();

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM