Session销毁方式
問題:Session的銷毀方式到底有哪些?
Session,作為我們離不開的后臺的技術,它的出現主要是為了解決 Http 協議的無狀態特點,用于解決用戶狀態的存儲問題,而往往對于存儲來說都會涉及到一個時間問題,下面我們來看看它的銷毀方式到底有哪些。
銷毀的方式
- 默認時間到期
- 自己設定到期時間
- 立刻失效
- 關閉瀏覽器
- 關閉服務器
案例實操
默認時間到期
當客戶端第一次請求 servlet 并且操作 session 時,session 對象生成,以 Tomcat 為例,Tomcat 中 session 默認的存活時間為 30min,即你不操作界面的時間,一旦有操作,session 會重新計時。那么 session 的默認時間可以改么?答案是肯定的。可以在 Tomcat 中的 web.xml 文件中進行修改。如下圖:
自己設定到期時間
當然除了以上的修改方式外,我們也可以在程序中自己設定 session 的生命周期,通過 session.setMaxInactiveInterval(int); 來設定 session 的最大不活動時間,單位為秒。
HttpSession session = req.getSession(); session.setMaxInactiveInterval(5);當然我們也可以通過 getMaxInactiveInterval(); 方法來查看當前 Session 對象的最大不活動時間。
立刻失效
或者我們也可以通過 session.invalidate(); 方法讓 session 立刻失效。
session.invalidate();關閉瀏覽器
session 的底層依賴 cookie 實現,因為不同用戶訪問服務器要判別到底是使用哪個 session,所以當用戶第一次訪問服務器的時候往往會把一個 session id 通過 cookie 存儲到用戶端,并且該 cookie 的有效時間為關閉瀏覽器,從而 session 在瀏覽器關閉時也相當于失效了(因為沒有 session id 再與之對應)。如下圖,關閉后再打開,重新給瀏覽器分配了個 session id。
需要注意的是這里只是 cookie 失效了,你再訪問相當于服務器把你當成了新用戶,又給你創建了一個 session,并沒有把之前的 session 對象銷毀。
關閉服務器
當非正常關閉服務器時,session 銷毀;當正常關閉服務器時,session 將被序列化到磁盤上,在工作空間 work 目錄下的 SESSION.ser 文件中,如果對象被保存在了 session 中,服務器在關閉時要把對象序列化到硬盤,這個對象就必須實現 Serializable 接口,下次啟動服務時,自動加載到內存。如下圖,正常關閉后可以看到文件夾中多了一個 SESSIONS.ser 文件,再次啟動服務器則文件消失。
擴展~Cookie的銷毀
從圖中除了看到 Cookie 的名稱和內容外,我們還需要關心一個信息,到期時間,到期時間用來指定該 cookie 何時失效。默認為當前瀏覽器關閉即失效。我們可以手動設定 cookie 的有效時間(通過到期時間計算),通過 setMaxAge(int expiry); 方法設定 cookie 的最大有效時間,以秒為單位。
-
大于 0 的整數,表示存儲的秒數;若為負數,則表示不存儲該 cookie;若為 0,則刪除該 cookie。
-
負整數:cookie 的 maxAge 屬性的默認值就是 -1,表示只在瀏覽器內存中存活,一旦關閉瀏覽器窗口,那么 cookie 就會消失。
-
正整數:表示 cookie 對象可存活指定的秒數。當生命大于 0 時,瀏覽器會把 Cookie 保存到硬盤上,就算關閉瀏覽器,就算重啟客戶端電腦,cookie 也會存活相應的時間。
e 對象可存活指定的秒數。當生命大于 0 時,瀏覽器會把 Cookie 保存到硬盤上,就算關閉瀏覽器,就算重啟客戶端電腦,cookie 也會存活相應的時間。 -
零:cookie 生命等于 0 是一個特殊的值,它表示 cookie 被作廢!也就是說,如果原來瀏覽器已經保存了這個 Cookie,那么可以通過 Cookie 的 setMaxAge(0) 來刪除這個 Cookie。 無論是在瀏覽器內存中,還是在客戶端硬盤上都會刪除這個 Cookie。
總結
以上是生活随笔為你收集整理的Session销毁方式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【数据结构】算法的渐进分析-渐进时间复杂
- 下一篇: iSAM1论文推导学习--第二节QR部分