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 解決的問題,我們首先來看下面的圖表

In-Memory Sessions
圖 1. 記憶體中會話

在上面的圖表中,每個 Spring 應用程式將其會話儲存在只有自己能夠訪問的地方,通常是伺服器的記憶體中,但這在分散式環境中可能會產生問題。想象一下,Spring App #2 接收到一個帶有 Session #3 的請求,由於該會話資料儲存在 Spring App #1 的記憶體中,Spring App #2 將無法讀取這些資料。為了解決這個問題,我們需要實現某種共享會話儲存,如下面的圖表所示

Shared Session Storage
圖 2. 共享會話儲存

透過上述設定,對於能夠訪問會話儲存的每個應用程式,會話都將變為可用。

Spring Session 在應用程式和會話管理之間提供了一個抽象層。它允許將會話資料儲存在各種持久化儲存中,例如關係型資料庫、NoSQL 資料庫等。

使用 Spring Session,您可以使用相同的 API 來管理會話,而無需考慮使用的持久化儲存。這使得在不同儲存之間切換變得更加容易,而無需更改應用程式程式碼。Spring Session 還提供了會話過期以及不同 Web 應用程式之間的跨上下文通訊等功能。

總的來說,Spring Session 簡化了 Web 應用程式中使用者會話的管理,使您能夠更容易地專注於構建應用程式的核心功能。

以下是 Spring Session 的一些常見用例

  • 分散式 Web 應用程式:如果您的 Web 應用程式分佈在多個伺服器上,管理使用者會話可能會具有挑戰性。Spring Session 可以透過將會話資料儲存在共享資料庫或 Redis 中來提供幫助,從而允許所有伺服器訪問和更新會話資料。

  • 會話可伸縮性:在具有許多併發使用者的大型 Web 應用程式中,將 Sessions 儲存在伺服器記憶體中可能導致可伸縮性問題。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

貢獻

我們歡迎 pull requests

許可證

Spring Session 是根據 Apache 2.0 許可證釋出的開源軟體。

社群擴充套件

名稱 地址

Spring Session Infinispan

infinispan.org/docs/stable/titles/spring/spring.html

Spring Session Caffeine

github.com/gotson/spring-session-caffeine

最低要求

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 示例應用程式。