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