關於Session的一些討論

2021-09-29 12:09:20 字數 1109 閱讀 6573

眾所周知,session是jsp的九大內建物件之一,也是伺服器二次識別客戶端的橋梁,它的生命週期非常長,一般都是存在於乙個會話(同一瀏覽器)之中,與「天地同壽」(伺服器)。

有如下例子:

1、在不關閉瀏覽器的情況下,建立乙個session,你始終可以訪問到這個session。

2、在不關閉瀏覽器的情況下,建立乙個session,再重新開啟乙個瀏覽器,訪問不到session。

3、在瀏覽器中建立乙個session,關閉,再開啟,訪問不到session。

4、在瀏覽器中建立乙個session,不關閉瀏覽器,關閉伺服器,直接訪問不到網頁。

相信碼友們都可以理解出現以上的情況的原因,那麼如果我們在第四個情況的基礎上再次開啟伺服器,那麼是否能訪問到session呢?

答案是能!

但是為什麼呢,session不是和伺服器同生共死嗎?

那是因為在關閉伺服器的同時,tomcat會產生乙個sessions.ser(序列化)檔案,當你再次啟動tomcat時,會將這個檔案內容讀取,該檔案會消失,從而有session死灰復燃的現象。

httpsessionactivationlistener:tomcat會在session從時間不被使用時鈍化session物件,所謂鈍化session,就是把session通過序列化的方式儲存到硬碟檔案中。當使用者再使用session時,tomcat還會把鈍化的物件再活化session,所謂活化就是把硬碟檔案中的session在反序列化回記憶體。當session被tomcat鈍化時,session中儲存的物件也被純化,當session被活化時,也會把session中儲存的物件活化。

如果不想session被序列化,可以去tomcat中找到context.xml檔案修改配置:

manager標籤後跟 pathname=""。

除了重啟伺服器的時候會有session的鈍化,當session過多時,伺服器會把長時間沒被使用的session進行鈍化。當物件再次感知(***)訪問這個session的時候會直接活化。

如果想要自定義物件被鈍化,就必須讓自定義物件實現序列化介面,否則無法活化,直接死亡。

關於樹狀陣列的一些討論

樹狀陣列用於在log n 的時間複雜度修改與詢問字首 相比線段樹更好寫 常數更小 不過侷限性很大 不能用於維護最大最小值之類的情況 最常用的應用 我用過的 大概有 單點修改區間查詢 區間修改單點查詢 區間修改區間查詢 離散化權值求逆序對 以上內容 洛谷金秋講義 上面已經把樹狀陣列定義以及修改查詢方法...

關於session的一些問題

如何取得所有的session變數?在程式除錯中,有時候需要知道有多少session變數在使用,她們的值如何?由於session物件提供乙個稱為contents的集合 collection 我們可以通過for.each迴圈來達到目標 dim strname,iloop for each strname...

關於DBC的一些思考與討論

今天與buaawhl討論dj語言的事情時,對於dbc有了更深入的思考與認識。具體的討論過程就不描述了,說說我的思考的結論吧。1 檢查 dbc的核心是檢查 更加嚴格的檢查。這其實是強型別語言之後,進一步的增強。一段程式,不但應該通過注釋告訴別人,自己需要什麼資料,自己能夠做些什麼。更應該直接用 進行強...