session簡介
在計算機專業(yè)術(shù)語中桑孩,Session是指一個終端用戶與交互系統(tǒng)進行通信的時間間隔拜鹤,通常指從注冊進入系統(tǒng)到注銷退出系統(tǒng)之間所經(jīng)過的時間以及如果需要的話,可能還有一定的操作空間流椒。
具體到Web中的Session指的就是用戶在瀏覽某個網(wǎng)站時敏簿,從進入網(wǎng)站到瀏覽器關(guān)閉所經(jīng)過的這段時間,也就是用戶瀏覽這個網(wǎng)站所花費的時間宣虾。因此從上述的定義中我們可以看到惯裕,Session實際上是一個特定的時間概念。
需要注意的是绣硝,一個Session的概念需要包括特定的客戶端蜻势,特定的服務器端以及不中斷的操作時間。A用戶和C服務器建立連接時所處的Session同B用戶和C服務器建立連接時所處的Session是兩個不同的Session鹉胖。
Session中的數(shù)據(jù)保存在服務器端握玛,在客戶端需要的時候創(chuàng)建Session,在客戶端不需要的時候銷毀Session甫菠,使它不再占用服務器內(nèi)存挠铲。前面說了服務器并不管客戶端是否依然存在,因而它也無法確定客戶端什么時間不再使用它寂诱,但是如果在客戶端不再用的時候不及時銷毀Session的話拂苹,服務器很快就會內(nèi)存不足。為了解決這個問題痰洒,給Session加了一個生命周期瓢棒,當服務器發(fā)現(xiàn)Session超過了它的生命周期,就會釋放該Session所占用的內(nèi)存空間丘喻。
要了解Session首先要知道一個概念:Session的銷毀只有兩種情況:
第一:session調(diào)用了session.invalidate()方法.
第二:前后兩次請求超出了session指定的生命周期時間.
第二種情況的解釋:
Session生成后音羞,只要用戶繼續(xù)訪問,服務器就會更新Session的最后訪問時間仓犬,并維護該Session嗅绰。用戶每訪問服務器一次,無論是否讀寫Session,服務器都認為該用戶的Session"活躍(active)"了一次窘面。
在ASP.NET中Session的默認生命周期是20分鐘翠语,也就是當我們在9:00的時候設置了一個Session,如果在9:20之前客戶端沒有任何請求财边,那么它的生命周期就到9:20分鐘結(jié)束肌括。但是一旦用戶在9:19又向服務器發(fā)送了一個請求,那么這個Session現(xiàn)在的生命周期就是在當前時間的基礎(chǔ)上再加上20分鐘酣难,也就是此時這個Session的生命周期是到9:39結(jié)束谍夭。
舉例:當我們登陸一個網(wǎng)站,網(wǎng)站會記錄我們的個人信息如用戶名等憨募,如果我們登陸了很長時間但是沒有任何操作紧索,那么session超時,我們再次操作時會讓我們重新登陸菜谣。但是如果我們登陸后珠漂,一直在訪問這個網(wǎng)站,就不會出現(xiàn)session超時的問題尾膊,我們也無需重新登陸媳危。(個人理解)
由于會有越來越多的用戶訪問服務器,因此Session也會越來越多冈敛。為防止內(nèi)存溢出待笑,服務器會把長時間內(nèi)沒有活躍的Session從內(nèi)存刪除。這個時間就是Session的超時時間抓谴。如果超過了超時時間沒訪問過服務器暮蹂,Session就自動失效了。
Session的超時時間為maxInactiveInterval屬性齐邦,可以通過對應的getMaxInactiveInterval()獲取椎侠,通過setMaxInactiveInterval(longinterval)修改第租。
Session的超時時間也可以在web.xml中修改措拇。另外,通過調(diào)用Session的invalidate()方法可以使Session失效慎宾。
60??????
注意:參數(shù)的單位為分鐘丐吓,而setMaxInactiveInterval(int s)單位為秒。
web.config里設置
Session具有以下特點:
(1)Session中的數(shù)據(jù)保存在服務器端趟据;
(2)Session中可以保存任意類型的數(shù)據(jù)券犁;
(2)Session默認的生命周期是20分鐘,可以手動設置更長或更短的時間汹碱。
至于設置可以用代碼設置或者在Web.config中配置粘衬,不過不建議將Session的超時時間設置過長,因為默認情況下Session在內(nèi)存中保存,設置時間過長保存的數(shù)據(jù)過大的話會導致內(nèi)存不足稚新。
注意:新開的瀏覽器窗口會生成新的Session勘伺,但子窗口除外。子窗口會共用父窗口的Session褂删。例如飞醉,在鏈接上右擊,在彈出的快捷菜單中選擇"在新窗口中打開"時屯阀,子窗口便可以訪問父窗口的Session缅帘。