Spring Session
Rob Winch;Vedran Pavić;Jay Bryant;Eleftheria Stein-Kousathana
Spring Session 提供了一個 API 和實現,用於管理使用者的會話資訊。
Spring Session 提供了一個 API 和實現,用於管理使用者的會話資訊,同時使支援叢集會話變得輕而易舉,而無需與特定於應用程式容器的解決方案繫結。它還提供與以下功能的透明整合:
-
HttpSession:允許以與應用程式容器無關的方式替換
HttpSession,支援在請求頭中提供會話 ID 以便與 RESTful API 配合使用。 -
WebSocket:提供了在接收 WebSocket 訊息時保持
HttpSession活躍的能力。 -
WebSession:允許以與應用程式容器無關的方式替換 Spring WebFlux 的
WebSession。
理解 Spring Session 解決的問題
當用戶與 Web 應用程式互動時,伺服器會建立一個會話來跟蹤其活動。此會話可以儲存諸如使用者偏好、登入狀態和購物車內容等資訊。然而,會話在分散式環境中可能會出現問題,因為它們通常儲存在伺服器的記憶體中。
為了更好地理解 Spring Session 解決的問題,我們首先來看以下圖表:
在上面的圖表中,每個 Spring 應用程式都將其會話儲存在一個只有自己才能訪問的地方,通常是伺服器的記憶體,但這在分散式環境中可能是一個問題。想象一下 Spring App #2 接收到帶有 Session #3 的請求的情況,應用程式將無法讀取會話資料,因為它儲存在 Spring App #1 的記憶體中。為了解決這個問題,我們需要實現某種共享會話儲存,如下圖所示:
透過上述設定,會話可供所有有權訪問會話儲存的應用程式使用。
Spring Session 在應用程式和會話管理之間提供了一個抽象層。它允許將會話資料儲存在各種持久化儲存中,例如關係資料庫、NoSQL 資料庫等。
使用 Spring Session,無論使用何種持久化儲存,您都可以使用相同的 API 來管理會話。這使得在不更改應用程式程式碼的情況下切換儲存變得更加容易。Spring Session 還提供了會話過期和不同 Web 應用程式之間的跨上下文通訊等功能。
總的來說,Spring Session 簡化了 Web 應用程式中使用者會話的管理,使您可以更輕鬆地專注於構建應用程式的核心功能。
以下是 Spring Session 的一些常見用例:
-
分散式 Web 應用程式:如果您的 Web 應用程式分佈在多個伺服器上,管理使用者會話可能具有挑戰性。Spring Session 可以透過將會話資料儲存在共享資料庫或 Redis 中來提供幫助,允許所有伺服器訪問和更新會話資料。
-
會話可擴充套件性:在具有大量併發使用者的大型 Web 應用程式中,將會話儲存在伺服器記憶體中可能會導致可擴充套件性問題。Spring 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
貢獻
我們感謝 拉取請求。
許可證
Spring Session 是根據 Apache 2.0 許可證釋出的開源軟體。
最低要求
Spring Session 的最低要求是
-
Java 17+。
-
如果您在 Servlet 容器中執行(非必需),則需要 Servlet 3.1+。
-
如果您使用其他 Spring 庫(非必需),則最低版本要求為 Spring 6.0.x。
-
@EnableRedisHttpSession需要 Redis 2.8+。這是支援會話過期所必需的。 -
@EnableHazelcastHttpSession需要 Hazelcast 3.6+。這是支援FindByIndexNameSessionRepository所必需的。
Spring Session 的核心僅依賴於 spring-jcl。有關在不使用任何其他 Spring 依賴項的情況下使用 Spring Session 的示例,請參閱 hazelcast 示例應用程式。 |