Tomcat 的會話管理(Session Manger)
Manager
Manger對象用於實現HTTP會話管理的功能,Tomcat6中有5種Manger的實現:
1. StandardManager(標準會話管理器)
Tomcat的默認會話管理器,用於非集羣環境中對單個處於運行狀態的Tomcat實例會話進行管理。當Tomcat關閉時,這些會話相關的數據會被寫入磁盤上的一個名叫SESSION.ser的文件,並在Tomcat下次啓動時讀取此文件。
默認只有在Tomcat正常關閉時纔會保存完整的用戶會話信息
默認保存於$CATALINA_HOME/work/Catalina/<hostname>/<webapp-name>/下的SESSIONS.ser文件中
若是自定義的虛擬主機則保存在 $CATALINA_HOME/work/Catalina/<hostname>/_/ 下的 SESSIONS.ser 文件中
- <Manager className="org.apache.catalina.session.StandardManager"
- maxInactiveInterval="7200"/>
maxActiveSessions:最多允許的活動會話數量,默認爲-1,表示不限制;
maxInactiveInterval:非活動的會話超時時長,默認爲60s;
pathname:會話文件的保存目錄;
2. PersistentManager(持久會話管理器)
將會話數據保存至持久存儲中,並且能在服務器意外中止後重新啓動時重新加載這些會話信息。持久會話管理器支持將會話保存至文件存儲(FileStore)或JDBC存儲(JDBCStore)中。
當一個會話長時間處於空閒狀態時會被寫入到swap會話對象,這對於內存資源比較吃緊的應用環境來說比較有用。
可以將每一個用戶的會話(每一個請求)都會保存在一個單獨的文件中 <session id>.session
FileStore 基於文件存儲
JDBCStore(java數據庫系統互聯) --> 保存在RDBMS中
3. DeltaManager
用於Tomcat集羣的會話管理器,它通過將改變了會話數據同步給集羣中的其它節點實現會話複製。這種實現會將所有會話的改變同步給集羣中的每一個節點,也是在集羣環境中用得最多的一種實現方式。
4. BackupManager
用於Tomcat集羣的會話管理器,與DeltaManager不同的是,某節點會話的改變只會同步給集羣中的另一個而非所有節點。
5. SimpleTcpReplicationManager
Tomcat4時用到的版本
持久會話管理器(PersistentManager) 保存至文件中的示例:
- <Manager className="org.apache.catalina.session.PersistentManager"
- saveOnRestart="true">
- <Store className="org.apache.catalina.session.FileStore"
- directory="/data/tomcat-sessions"/>
- </Manager>
每個用戶的會話會被保存至directory指定的目錄中的文件中,文件名爲<session id>.session,並通過後臺線程每隔一段時間(checkInterval參數定義,默認爲60秒)檢查一次超時會話。
(如有錯誤或不足之處還請多多指教)