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

2021-10-11 17:48:46 字數 1766 閱讀 4303

session,作為我們離不開的後台的技術,它的出現主要是為了解決 http 協議的無狀態特點,用於解決使用者狀態的儲存問題,而往往對於儲存來說都會涉及到乙個時間問題,下面我們來看看它的銷毀方式到底有哪些。

當客戶端第一次請求 servlet 並且操作 session 時,session 物件生成,以 tomcat 為例,tomcat 中 session 預設的存活時間為 30min,即你不操作介面的時間,一旦有操作,session 會重新計時。那麼 session 的預設時間可以改麼?答案是肯定的。可以在 tomcat 中的 web.xml 檔案中進行修改。如下圖:

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

);當然我們也可以通過 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 的有效時間(通過到期時間計算),通過 setmaxage(int expiry); 方法設定 cookie 的最大有效時間,以為單位。

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

session,作為我們離不開的後台的技術,它的出現主要是為了解決 http 協議的無狀態特點,用於解決使用者狀態的儲存問題,而往往對於儲存來說都會涉及到乙個時間問題,下面我們來看看它的銷毀方式到底有哪些。當客戶端第一次請求 servlet 並且操作 session 時,session 物件生成,以...

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

session,作為我們離不開的後台的技術,它的出現主要是為了解決 http 協議的無狀態特點,用於解決使用者狀態的儲存問題,而往往對於儲存來說都會涉及到乙個時間問題,下面我們來看看它的銷毀方式到底有哪些。當客戶端第一次請求 servlet 並且操作 session 時,session 物件生成,以...

筆記 Session的銷毀方式到底有哪些?

session,作為我們離不開的後台的技術,它的出現主要是為了解決 http 協議的無狀態特點,用於解決使用者狀態的儲存問題,而往往對於儲存來說都會涉及到乙個時間問題,下面我們來看看它的銷毀方式到底有哪些。當客戶端第一次請求 servlet 並且操作 session 時,session 物件生成,以...