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

深入剖析 JSP/Servlet 會話管理機制與改進策略

     編輯:關於JSP

Servlet 會話管理現狀

HTTP 無狀態特性要求伺服器自行維持會話。Servlet API 提供 HttpSession 介面,以「名稱-值」對儲存屬性,核心方法:

  • setAttribute(String, Object):存入物件
  • getAttribute(String):取出物件
  • getMaxInactiveInterval() / setMaxInactiveInterval(int):讀寫逾時間隔(秒),-1 表永不逾時
  • getLastAccessedTime():最後存取時間
  • invalidate():手動銷毀 Session

容器採用「逾時淘汰」機制:超過間隔無請求則自動銷毀 Session 釋放記憶體。預設逾時由容器定義(如 30 分鐘)。

Session ID 傳遞與限制

新用戶首次請求建立 Session 時,容器透過 Set-Cookie 標頭發送唯一 Session ID(通常名為 JSESSIONID)。瀏覽器後續請求自動攜帶此 Cookie,容器據此關聯既有 Session。

三大痛點:

  1. 記憶體壓力:所有 Session 物件駐留堆積,高併發時資源消耗可觀。
  2. Cookie 依賴:用戶關閉 Cookie 導致 Session 追蹤失效,每次請求都會建立新 Session,舊資料孤立且記憶體洩漏。
  3. 叢集環境不互通:多 JVM/多伺服器下,各節點無法識別彼此產生的 Session ID,需「黏性 Session」或共享儲存方案。

改進方向

  • 將 Session 資料外移至 Redis/Database 共享儲存,實現無狀態化。
  • 支援 URL Rewriting 作為 Cookie 失效時的備援機制。
  • 引入分散式 Session 管理框架(如 Spring Session),透過 Filter 統一攔截與同步。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved