Tomcat 為每個 Web 應用(Context)維護獨立 Manager,Session ID(JSESSIONID)互不共享。
// 登錄成功後
String sessionId = request.getSession().getId();
Cookie cookie = new Cookie("JSESSIONID", sessionId);
cookie.setPath("/"); // 共享根路徑
cookie.setDomain(".example.com"); // 同主域
response.addCookie(cookie);缺點:Session 數據仍分散在各應用內存,需共享存儲(Redis/Database)才能真正實現會話共享。
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>
// application.yml
spring:
session:
store-type: redis
redis:
host: localhost
port: 6379所有應用接入同一 Redis,自動共享 Session,支援集群、過期策略。
架構層面解決:統一認證中心頒發 Token,各應用驗證 Token 獲取用戶身份,無需共享 Session ID。