JSESSIONID)或 URL 重寫(;jsessionid=xxx)提取Manager (介面)
├── ManagerBase (基礎實作)
│ ├── StandardManager (預設,單機,重啟序列化保存 SESSION.ser)
│ └── PersistentManagerBase
│ └── PersistentManager (閒置 Session 交換至磁碟/資料庫)
└── ClusterManager (集群介面)
├── ClusterManagerBase
│ ├── DeltaManager (全量複製,同構集群)
│ └── BackupManager (單備份,異構支援)
SessionIdGenerator.generateSessionId() 預設 16 位元組,可透過 sessionIdLength 屬性調整。
<session-config>
<session-timeout>30</session-timeout> <!-- 分鐘 -->
</session-config>
<Context>
<Manager className="org.apache.catalina.session.PersistentManager"
maxIdleSwap="1"
minIdleSwap="1">
<Store className="org.apache.catalina.session.FileStore"
directory="sessions" />
</Manager>
</Context>
FileStore:本地檔案 .sessionJDBCStore:資料庫表,需設定 Driver/URLorg.apache.catalina.Store| 模式 | 複製範圍 | 一致性要求 | 適用場景 |
|---|---|---|---|
| DeltaManager | 全節點廣播 | 同構(相同 war、相同類載入順序) | 中小型同構集群 |
| BackupManager | 單一備份節點 | 異構支援 | 大型/異構集群 |
Serializable 未實作導致複製失敗 → 所有放入 Session 的物件必須實作深入理解 Tomcat Session 機制,有助於排查分布式登入失效、Session 丟失、叢集同步延遲等疑難雜症。