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

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

更多

為什么需要持久化

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

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

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

Session的持久化的作用:

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

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

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

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

org.apache.catalina.session.StandardManager

org.apache.catalina.session.PersistentManager

StandardManager是tomcat默認(rèn)使用的,在web應(yīng)用程序關(guān)閉時(shí),對(duì)內(nèi)存中的所有HttpSession對(duì)象進(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對(duì)象保存到該設(shè)備

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