Spring Session
Rob Winch; Vedran Pavić; Jay Bryant; Eleftheria Stein-Kousathana
Spring Session 提供 API 和實作,用於管理使用者的 session 資訊。
Spring Session 提供 API 和實作,用於管理使用者的 session 資訊,同時也能輕鬆支援叢集 session,而無需受限於特定應用程式容器的解決方案。它還提供與下列項目的透明整合:
-
HttpSession:允許以應用程式容器中立的方式取代
HttpSession
,並支援在標頭中提供 session ID,以便與 RESTful API 搭配使用。 -
WebSocket:提供在接收 WebSocket 訊息時保持
HttpSession
存活的能力 -
WebSession:允許以應用程式容器中立的方式取代 Spring WebFlux 的
WebSession
。
理解 Spring Session 解決的問題
當使用者與 Web 應用程式互動時,伺服器會建立一個 session 來追蹤他們的活動。此 session 可能會儲存使用者偏好設定、登入狀態和購物車內容等資訊。然而,Session 在分散式環境中可能會出現問題,因為它們通常儲存在伺服器的記憶體中。
為了更好地理解 Spring Session 解決的問題,我們先視覺化以下圖表

在上圖中,每個 Spring 應用程式都將其 session 儲存在只有自己可以存取的位置,通常是在伺服器的記憶體中,但在分散式環境中這可能會成為問題。想像一下,Spring App #2 接收到包含 Session #3 的請求,應用程式將無法讀取 session 資料,因為它儲存在 Spring App #1 的記憶體中。為了解決這個問題,我們需要實作某種共用 Session 儲存,如下圖所示

透過上述設定,session 將可供每個有權存取 session 儲存的應用程式使用。
Spring Session 在應用程式和 session 管理之間提供了一個抽象層。它允許 session 資料儲存在各種持久性儲存中,例如關聯式資料庫、NoSQL 資料庫和其他資料庫。
使用 Spring Session,無論使用哪種持久性儲存,您都可以使用相同的 API 來管理 session。這使得在儲存之間切換變得更容易,而無需更改應用程式程式碼。Spring Session 還提供 session 過期和不同 Web 應用程式之間的跨上下文通訊等功能。
總體而言,Spring Session 簡化了 Web 應用程式中使用者 session 的管理,讓您可以更輕鬆地專注於建構應用程式的核心功能。
以下是 Spring Session 的一些常見用例
-
分散式 Web 應用程式:如果您有一個分散在多個伺服器上的 Web 應用程式,管理使用者 session 可能會很具挑戰性。Spring Session 可以透過將 session 資料儲存在共用資料庫或 Redis 中來提供協助,讓所有伺服器都能存取和更新 session 資料。
-
Session 可擴展性:在具有許多並行使用者的龐大 Web 應用程式中,將 session 儲存在伺服器上的記憶體中可能會導致可擴展性問題。Spring Session 允許您將 session 資料儲存在持久性儲存中,從而提高可擴展性並降低記憶體不足錯誤的風險。
-
Session 備份和復原:將 session 資料儲存在持久性儲存中,還可以提供一種機制,用於在伺服器故障或停機時備份和復原 session 資料。
Spring Session 社群
我們很高興將您視為我們社群的一份子。以下章節提供有關如何與 Spring Session 社群互動的更多資訊。
支援
您可以透過在 Stack Overflow 上使用 spring-session
標籤提問來獲得幫助。同樣地,我們鼓勵透過回答 Stack Overflow 上的問題來幫助他人。
原始碼
您可以在 GitHub 上找到原始碼:github.com/spring-projects/spring-session/
問題追蹤
我們在 GitHub issues 中追蹤問題:github.com/spring-projects/spring-session/issues
貢獻
我們感謝pull requests。
授權條款
Spring Session 是在 Apache 2.0 授權條款下發布的開放原始碼軟體。
最低需求
Spring Session 的最低需求為
-
Java 17+。
-
如果您在 Servlet 容器中執行 (非必要),則為 Servlet 3.1+。
-
如果您使用其他 Spring 程式庫 (非必要),則最低必要版本為 Spring 6.0.x。
-
@EnableRedisHttpSession
需要 Redis 2.8+。這是支援Session 過期所必需的 -
@EnableHazelcastHttpSession
需要 Hazelcast 3.6+。這是支援FindByIndexNameSessionRepository
所必需的
在其核心,Spring Session 僅對 spring-jcl 有必要依賴性。如需在沒有任何其他 Spring 依賴性的情況下使用 Spring Session 的範例,請參閱 hazelcast 範例應用程式。 |