問題:Session的銷毀方式到底有哪些?

Session,作為我們離不開的后臺的技術(shù),它的出現(xiàn)主要是為了解決 Http 協(xié)議的無狀態(tài)特點,用于解決用戶狀態(tài)的存儲問題,而往往對于存儲來說都會涉及到一個時間問題,下面我們來看看它的銷毀方式到底有哪些。

銷毀的方式

默認時間到期

自己設定到期時間

立刻失效

關(guān)閉瀏覽器

關(guān)閉服務器

案例實操

默認時間到期

當客戶端第一次請求 servlet 并且操作 session 時,session 對象生成,以 Tomcat 為例,Tomcat 中 session 默認的存活時間為 30min,即你不操作界面的時間,一旦有操作,session 會重新計時。那么 session 的默認時間可以改么?答案是肯定的??梢栽?Tomcat 中的 web.xml 文件中進行修改。如下圖:

自己設定到期時間

當然除了以上的修改方式外,我們也可以在程序中自己設定 session 的生命周期,通過 session.setMaxInactiveInterval(int); 來設定 session 的最大不活動時間,單位為秒。

HttpSessionsession=req.getSession();

session.setMaxInactiveInterval(5);

當然我們也可以通過 getMaxInactiveInterval(); 方法來查看當前 Session 對象的最大不活動時間。

立刻失效

或者我們也可以通過 session.invalidate(); 方法讓 session 立刻失效。

session.invalidate();

關(guān)閉瀏覽器

session 的底層依賴 cookie 實現(xiàn),因為不同用戶訪問服務器要判別到底是使用哪個 session,所以當用戶第一次訪問服務器的時候往往會把一個 session id 通過 cookie 存儲到用戶端,并且該 cookie 的有效時間為關(guān)閉瀏覽器,從而 session 在瀏覽器關(guān)閉時也相當于失效了(因為沒有 session id 再與之對應)。如下圖,關(guān)閉后再打開,重新給瀏覽器分配了個 session id。

需要注意的是這里只是 cookie 失效了,你再訪問相當于服務器把你當成了新用戶,又給你創(chuàng)建了一個 session,并沒有把之前的 session 對象銷毀。

關(guān)閉服務器

當非正常關(guān)閉服務器時,session 銷毀;當正常關(guān)閉服務器時,session 將被序列化到磁盤上,在工作空間 work 目錄下的 SESSION.ser 文件中,如果對象被保存在了 session 中,服務器在關(guān)閉時要把對象序列化到硬盤,這個對象就必須實現(xiàn) Serializable 接口,下次啟動服務時,自動加載到內(nèi)存。如下圖,正常關(guān)閉后可以看到文件夾中多了一個 SESSIONS.ser 文件,再次啟動服務器則文件消失。

擴展~Cookie的銷毀

從圖中除了看到 Cookie 的名稱和內(nèi)容外,我們還需要關(guān)心一個信息,到期時間,到期時間用來指定該 cookie 何時失效。默認為當前瀏覽器關(guān)閉即失效。我們可以手動設定 cookie 的有效時間(通過到期時間計算),通過 setMaxAge(int expiry); 方法設定 cookie 的最大有效時間,以為單位。

大于 0 的整數(shù),表示存儲的秒數(shù);若為負數(shù),則表示不存儲該 cookie;若為 0,則刪除該 cookie。

負整數(shù):cookie 的 maxAge 屬性的默認值就是 -1,表示只在瀏覽器內(nèi)存中存活,一旦關(guān)閉瀏覽器窗口,那么 cookie 就會消失。

正整數(shù):表示 cookie 對象可存活指定的秒數(shù)。當生命大于 0 時,瀏覽器會把 Cookie 保存到硬盤上,就算關(guān)閉瀏覽器,就算重啟客戶端電腦,cookie 也會存活相應的時間。

:cookie 生命等于 0 是一個特殊的值,它表示 cookie 被作廢!也就是說,如果原來瀏覽器已經(jīng)保存了這個 Cookie,那么可以通過 Cookie 的 setMaxAge(0) 來刪除這個 Cookie。 無論是在瀏覽器內(nèi)存中,還是在客戶端硬盤上都會刪除這個 Cookie。

各位小伙伴們學習完記得加個關(guān)注和收藏點藏哦!想要學習資料的可+小姐姐V哦!? ? ? ? ? ? lezijie005? 打上備注678,不備注是要拒絕的哦!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容