當(dāng)前位置: 首頁IT技術(shù) → 淺述Session的持久化的作用與原理

淺述Session的持久化的作用與原理

更多

為什么需要持久化

客戶端訪問了某個(gè)能開啟會(huì)話功能的資源, web服務(wù)器就會(huì)創(chuàng)建一個(gè)與該客戶端對應(yīng)的HttpSession對象,每個(gè)HttpSession對象都要站用一定的內(nèi)存空間。如果在某一時(shí)間段內(nèi)訪問站點(diǎn)的用戶很多,web服務(wù)器內(nèi)存中就會(huì)積累大量的HttpSession對象,消耗大量的服務(wù)器內(nèi)存,即使用戶已經(jīng)離開或者關(guān)閉了瀏覽器,web服務(wù)器仍要保留與之對應(yīng)的HttpSession對象,在他們超時(shí)之前,一直占用web服務(wù)器內(nèi)存資源。

web服務(wù)器通常將那些暫時(shí)不活動(dòng)但未超時(shí)的HttpSession對象轉(zhuǎn)移到文件系統(tǒng)或數(shù)據(jù)庫中保存,服務(wù)器要使用他們時(shí)再將他們從文件系統(tǒng)或數(shù)據(jù)庫中裝載入內(nèi)存,這種技術(shù)稱為Session的持久化。

將HttpSession對象保存到文件系統(tǒng)或數(shù)據(jù)庫中,需要采用序列化的方式將HttpSession對象中的每個(gè)屬性對象保存到文件系統(tǒng)或數(shù)據(jù)庫中;將HttpSession對象從文件系統(tǒng)或數(shù)據(jù)庫中裝載如內(nèi)存時(shí),需要采用反序列化的方式,恢復(fù)HttpSession對象中的每個(gè)屬性對象。所以存儲(chǔ)在HttpSession對象中的每個(gè)屬性對象必須實(shí)現(xiàn)Serializable接口

Session的持久化的作用:

1.提高服務(wù)器內(nèi)存的利用率,保證那些暫停活動(dòng)的客戶端在會(huì)話超時(shí)之前繼續(xù)原來的會(huì)話

2.在多臺(tái)web服務(wù)器協(xié)同對外提供服務(wù)的集群系統(tǒng)中,使用Session的持久化技術(shù),某臺(tái)服務(wù)器可以將其中發(fā)生改變的Session對象復(fù)制給其他服務(wù)器。保證了在某臺(tái)服務(wù)器停止工作后可以由其他服務(wù)器來接替它與客戶端的會(huì)話

3.在一個(gè)web應(yīng)用程序重啟時(shí),服務(wù)器也會(huì)持久化該應(yīng)用程序中所有HttpSession對象,保證客戶端的會(huì)話活動(dòng)仍可以繼續(xù)。

Tomcat使用Session Manager 類來管理Session的持久化,他提供了兩個(gè)SessionManager類

org.apache.catalina.session.StandardManager

org.apache.catalina.session.PersistentManager

StandardManager是tomcat默認(rèn)使用的,在web應(yīng)用程序關(guān)閉時(shí),對內(nèi)存中的所有HttpSession對象進(jìn)行持久化,把他們保存到文件系統(tǒng)中。默認(rèn)的存儲(chǔ)文件為:

/work/Catalina/<主機(jī)名>/<應(yīng)用程序名>/sessions.ser

PersistentManager比StandardManager更為靈活,只要某個(gè)設(shè)備提供了實(shí)現(xiàn)org.apache.catalina.Store接口的驅(qū)動(dòng)類,PersistentManager就可以將HttpSession對象保存到該設(shè)備

熱門評論
最新評論
發(fā)表評論 查看所有評論(0)
昵稱:
表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
字?jǐn)?shù): 0/500 (您的評論需要經(jīng)過審核才能顯示)