首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Tomcat Session 管理機制深度解析:從請求解析到集群複製

     編輯:Java 相關知識

核心流程概覽

  1. Session ID 解析:從 Cookie(預設 JSESSIONID)或 URL 重寫(;jsessionid=xxx)提取
  2. Session 查找/建立:依 ID 從 Manager 獲取,不存在或過期則建立新 Session
  3. Session 持久化/複製:單機序列化至磁碟,集群模式下跨節點複製

關鍵組件架構

Manager (介面)
├── ManagerBase (基礎實作)
│   ├── StandardManager (預設,單機,重啟序列化保存 SESSION.ser)
│   └── PersistentManagerBase
│       └── PersistentManager (閒置 Session 交換至磁碟/資料庫)
└── ClusterManager (集群介面)
    ├── ClusterManagerBase
    │   ├── DeltaManager (全量複製,同構集群)
    │   └── BackupManager (單備份,異構支援)

Session ID 生成器

SessionIdGenerator.generateSessionId() 預設 16 位元組,可透過 sessionIdLength 屬性調整。

配置要點

web.xml 全域逾時

<session-config>
    <session-timeout>30</session-timeout> <!-- 分鐘 -->
</session-config>

context.xml 指定 Manager

<Context>
    <Manager className="org.apache.catalina.session.PersistentManager" 
             maxIdleSwap="1" 
             minIdleSwap="1">
        <Store className="org.apache.catalina.session.FileStore" 
               directory="sessions" />
    </Manager>
</Context>

Store 策略

  • FileStore:本地檔案 .session
  • JDBCStore:資料庫表,需設定 Driver/URL
  • 自訂 Store 實作 org.apache.catalina.Store

集群 Session 複製模式對比

模式複製範圍一致性要求適用場景
DeltaManager全節點廣播同構(相同 war、相同類載入順序)中小型同構集群
BackupManager單一備份節點異構支援大型/異構集群

常見坑與調優

  • Session 過大導致序列化/網路傳輸慢 → 僅存放必要資料
  • Sticky Session 與複製機制衝突 → 理解負載均衡器行為
  • Serializable 未實作導致複製失敗 → 所有放入 Session 的物件必須實作

深入理解 Tomcat Session 機制,有助於排查分布式登入失效、Session 丟失、叢集同步延遲等疑難雜症。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved