session簡介
在計算機專業術語中,Session是指一個終端用戶與交互系統進行通信的時間間隔,通常指從注冊進入系統到注銷退出系統之間所經過的時間以及如果需要的話,可能還有一定的操作空間。
具體到Web中的Session指的就是用戶在瀏覽某個網站時,從進入網站到瀏覽器關閉所經過的這段時間,也就是用戶瀏覽這個網站所花費的時間。因此從上述的定義中我們可以看到,Session實際上是一個特定的時間概念。
需要注意的是,一個Session的概念需要包括特定的客戶端,特定的服務器端以及不中斷的操作時間。A用戶和C服務器建立連接時所處的Session同B用戶和C服務器建立連接時所處的Session是兩個不同的Session。
Session中的數據保存在服務器端,在客戶端需要的時候創建Session,在客戶端不需要的時候銷毀Session,使它不再占用服務器內存。前面說了服務器并不管客戶端是否依然存在,因而它也無法確定客戶端什么時間不再使用它,但是如果在客戶端不再用的時候不及時銷毀Session的話,服務器很快就會內存不足。為了解決這個問題,給Session加了一個生命周期,當服務器發現Session超過了它的生命周期,就會釋放該Session所占用的內存空間。
要了解Session首先要知道一個概念:Session的銷毀只有兩種情況:
第一:session調用了session.invalidate()方法.
第二:前后兩次請求超出了session指定的生命周期時間.
第二種情況的解釋:
Session生成后,只要用戶繼續訪問,服務器就會更新Session的最后訪問時間,并維護該Session。用戶每訪問服務器一次,無論是否讀寫Session,服務器都認為該用戶的Session"活躍(active)"了一次。
在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中修改。另外,通過調用Session的invalidate()方法可以使Session失效。
60??????
注意:參數的單位為分鐘,而setMaxInactiveInterval(int s)單位為秒。
web.config里設置
Session具有以下特點:
(1)Session中的數據保存在服務器端;
(2)Session中可以保存任意類型的數據;
(2)Session默認的生命周期是20分鐘,可以手動設置更長或更短的時間。
至于設置可以用代碼設置或者在Web.config中配置,不過不建議將Session的超時時間設置過長,因為默認情況下Session在內存中保存,設置時間過長保存的數據過大的話會導致內存不足。
注意:新開的瀏覽器窗口會生成新的Session,但子窗口除外。子窗口會共用父窗口的Session。例如,在鏈接上右擊,在彈出的快捷菜單中選擇"在新窗口中打開"時,子窗口便可以訪問父窗口的Session。