session為什么需要持久化


為什么需要持久化:
  客戶端訪問了某個能開啟會話功能的資源, web服務器就會創建一個與該客戶端對應的HttpSession對象,每個HttpSession對象都要站用一定的內存空間。如果在某一時間段內訪問站點的用戶很多,web服務器內存中就會積累大量的HttpSession對象,消耗大量的服務器內存,即使用戶已經離開或者關閉了瀏覽器,web服務器仍要保留與之對應的HttpSession對象,在他們超時之前,一直占用web服務器內存資源。


  web服務器通常將那些暫時不活動但未超時的HttpSession對象轉移到文件系統或數據庫中保存,服務器要使用他們時再將他們從文件系統或數據庫中裝載入內存,這種技術稱為Session的持久化。
  將HttpSession對象保存到文件系統或數據庫中,需要采用序列化的方式將HttpSession對象中的每個屬性對象保存到文件系統或數據庫中;將HttpSession對象從文件系統或數據庫中裝載如內存時,需要采用反序列化的方式,恢復HttpSession對象中的每個屬性對象。所以存儲在HttpSession對象中的每個屬性對象必須實現Serializable接口


 

Session的持久化的作用:
  1.提高服務器內存的利用率,保證那些暫停活動的客戶端在會話超時之前繼續原來的會話
  2,在多台web服務器協同對外提供服務的集群系統中,使用Session的持久化技術,某台服務器可以將其中發生改變的Session對象復制給其他服務器。保證了在某台服務器停止工作后可以由其他服務器來接替它與客戶端的會話
  3,在一個web應用程序重啟時,服務器也會持久化該應用程序中所有HttpSession對象,保證客戶端的會話活動仍可以繼續。


Tomcat使用Session Manager 類來管理Session的持久化,他提供了兩個SessionManager類
org.apache.catalina.session.StandardManager
org.apache.catalina.session.PersistentManager
StandardManager是tomcat默認使用的,在web應用程序關閉時,對內存中的所有HttpSession對象進行持久化,把他們保存到文件系統中。默認的存儲文件為
<tomcat 安裝目錄>/work/Catalina/<主機名>/<應用程序名>/sessions.ser
PersistentManager比StandardManager更為靈活,只要某個設備提供了實現org.apache.catalina.Store接口的驅動類,PersistentManager就可以將HttpSession對象保存到該設備


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM