Session的主要數據被存儲在服務器內存中,而服務器會爲每一個在線用戶建立一個Session對象,當在線用戶不少時,例如同時有幾萬或是幾十萬在線的狀況下,Session內存的開銷將會十分巨大,會影響Web服務器性能。而Session的鈍化機制恰好可解決此問題。Session鈍化機制的本質就在於把服務器中不常常使用的Session對象暫時序列化到系統文件系統或是數據庫系統中,當被使用時反序列化到內存中,整個過程由服務器自動完成。java
實現:mysql
要完成session持久化,存放在session裏的對象必需要實現java.io.Serializable 接口。web
Tomcat經過兩個session管理類實現session持久化,StandardManager (默認),PersistentManagersql
StandardManager:不使用任何的Store,當Tomcat正常關閉,重啓或Web應用從新加載時,它會將內存中的session序列化到Tomcat目錄下數據庫
/work/Catalina/host_name/webappname/SESSIONS.ser文件中。當Tomcat重啓或應用加載完成後,tomcat會將文件中的session從新還原到內存中。apache
注:若是忽然終止該服務器,則全部會話都將喪失,由於StandardManager沒有機會實現存盤處理。tomcat
PersistentManager: 經過使用Store,將內存中的session備份到文件或數據庫中。當備份一個session對象時,該session對象會被複制到存儲器中,而原對象仍然留在內存中。所以若是服務器崩潰,就能夠從存儲器中獲取活動的session對象。當session被換出時,他會被移動到存儲器中,由於當前活動的session對象超過了上限值,或者session對象閒置了過長時間。換出session節省內存空間。服務器
配置:session
Tomcat默認是已經啓用持久化配置,若要禁用持久化功能,則只須要在<Context>節點裏配置app
<Manager pathname="" />;
持久化配置可進行全局配置和針對某一站點進行配置。全局配置須要在cof文件夾context.xml的
<Context>節點中配置<Manager>,若要針對某一站點配置則須要在cof文件夾server.xml的<Host><Context>
節點中添加<Manager>配置。
StandardManager:
<Manager
className=」org.apache.catalina.session.StandardManager」
debug=」0」
maxInactiveInterval=」-1″
/>
PersistentManager:
方式1:
<Manager
className="org.apache.catalina.session.PersistentManager"
saveOnRestart="true"
maxActiveSession="-1"
minIdleSwap="0"
maxIdleSwap="30"
maxIdleBackup="0"
>
<Store
className="org.apache.catalina.session.FileStore"
checkInterval=」60」
directory="../session"/>
</Manager>
方式2:
和方式1的區別:
<Store
calssName="org.apache.catalina.JDBCStore"
driverName="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost/tomsessionDB?user=root&password="
sessionTable="tomcat_session"
sessionIdCol="session_id"
sessionDataCol="session_data"
sessionValidCol="session_valid"
sessionMaxInactiveCol="max_inactive"
sessionLastAccessedCol="last_access"
sessionAppCol="app_name"
checkInterval="60"
debug="99" />
參數說明:
maxActiveSessions-可處於活動狀態的session數,default -1 不限制
checkInterval - 檢查session是否過時的時間間隔,default 60s
saveOnRestart-服務器關閉時,是否將全部的session保存到文件中;
minIdleSwap/maxIdleSwap-session處於不活動狀態最短/長時間(s),sesson對象轉移到File Store中;(-1表示沒有限制)
maxIdleBackup-超過這一時間,將session備份。(-1表示沒有限制)
directory-文件存儲位置work\Catalina\host name\web app\session\文件名.session