session的生命週期

在CSDN看到一篇關於session的文章很不錯就轉載一下~~~web

session簡介

 

    在計算機專業術語中,Session是指一個終端用戶與交互系統進行通訊的時間間隔,一般指從註冊進入系統到註銷退出系統之間所通過的時間以及若是須要的話,可能還有必定的操做空間。瀏覽器

    具體到Web中的Session指的就是用戶在瀏覽某個網站時,從進入網站到瀏覽器關閉所通過的這段時間,也就是用戶瀏覽這個網站所花費的時間。所以從上述的定義中咱們能夠看到,Session其實是一個特定的時間概念。服務器

 

須要注意的是,一個Session的概念須要包括特定的客戶端,特定的服務器端以及不中斷的操做時間。A用戶和C服務器創建鏈接時所處的Session同B用戶和C服務器創建鏈接時所處的Session是兩個不一樣的Session。session

  

session生命週期

 

    Session中的數據保存在服務器端,在客戶端須要的時候建立Session,在客戶端不須要的時候銷燬Session,使它再也不佔用服務器內存。前面說了服務器並無論客戶端是否依然存在,於是它也沒法肯定客戶端什麼時間再也不使用它,可是若是在客戶端再也不用的時候不及時銷燬Session的話,服務器很快就會內存不足。爲了解決這個問題,給Session加了一個生命週期,當服務器發現Session超過了它的生命週期,就會釋放該Session所佔用的內存空間。網站

 

要了解Session首先要知道一個概念:Session的銷燬只有兩種狀況:spa

第一:session調用了session.invalidate()方法.xml

第二:先後兩次請求超出了session指定的生命週期時間.生命週期

 

第二種狀況的解釋:內存

Session生成後,只要用戶繼續訪問,服務器就會更新Session的最後訪問時間,並維護該Session。用戶每訪問服務器一次,不管是否讀寫Session,服務器都認爲該用戶的Session"活躍(active"了一次。get

 

    在ASP.NET中Session的默認生命週期是20分鐘,也就是當咱們在9:00的時候設置了一個Session,若是在9:20以前客戶端沒有任何請求,那麼它的生命週期就到9:20分鐘結束。可是一旦用戶在9:19又向服務器發送了一個請求,那麼這個Session如今的生命週期就是在當前時間的基礎上再加上20分鐘,也就是此時這個Session的生命週期是到9:39結束。

 

 

    舉例:當咱們登錄一個網站,網站會記錄咱們的我的信息如用戶名等,若是咱們登錄了很長時間可是沒有任何操做,那麼session超時,咱們再次操做時會讓咱們從新登錄。可是若是咱們登錄後,一直在訪問這個網站,就不會出現session超時的問題,咱們也無需從新登錄。(我的理解)

 

 

    因爲會有愈來愈多的用戶訪問服務器,所以Session也會愈來愈多。爲防止內存溢出,服務器會把長時間內沒有活躍的Session從內存刪除。這個時間就是Session的超時時間。若是超過了超時時間沒訪問過服務器,Session就自動失效了。

 

 

    Session的超時時間爲maxInactiveInterval屬性,能夠經過對應的getMaxInactiveInterval()獲取,經過setMaxInactiveInterval(longinterval)修改。

Session的超時時間也能夠在web.xml中修改。另外,經過調用Sessioninvalidate()方法可使Session失效。

 

<session-config> 

   <session-timeout>60</session-timeout>       <!--單位:分鐘--> 

</session-config>

注意:<session-timeout>參數的單位爲分鐘,而setMaxInactiveInterval(int s)單位爲秒。

web.config裏設置<sessionState timeout="30"></sessionState>

  

 

Session具備如下特色:

 

1Session中的數據保存在服務器端;

2Session中能夠保存任意類型的數據;

2Session默認的生命週期是20分鐘,能夠手動設置更長或更短的時間。

至於設置能夠用代碼設置或者在Web.config中配置,不過不建議將Session的超時時間設置過長,由於默認狀況下Session在內存中保存,設置時間過長保存的數據過大的話會致使內存不足。

 

 

注意:新開的瀏覽器窗口會生成新的Session,但子窗口除外。子窗口會共用父窗口的Session。例如,在連接上右擊,在彈出的快捷菜單中選擇"在新窗口中打開"時,子窗口即可以訪問父窗口的Session

相關文章
相關標籤/搜索