1. 程式人生 > >分散式框架spring-session實現session一致性使用問題

分散式框架spring-session實現session一致性使用問題

前言:專案中使用到spring-session來快取使用者資訊,保證服務之間session一致性,但是獲取session資訊為什麼不能再服務層獲取?

一、spring-session實現session一致性方式

使用者每一次請求都會攜帶sessionId,使用者登入時會根據sessionId去校驗使用者資訊是否存在,瀏覽器端只要保證當前的cookie資訊,獲取     session資訊儲存在redis中,不依賴服務之間,所以就保證了session一致性

     

二、有狀態和無狀態

1、有狀態bean:

每個連線都會建立單獨的例項,在當前使用者的生存週期內,例項中儲存使用者的資訊,即有狀態,一旦呼叫完成或者例項結束,bean的生命週期結束,每個連線都會得到一個初始化的bean

2、無狀態bean:

bean一旦被例項化就會存在會話池中,所有的連線都可以共享,該例項由於沒有指定被哪個物件呼叫,所以即使連線物件生命週期結束,該例項也不會被銷燬,所以該例項被稱為無狀態的,

三、原因分析

這也就解釋了為什麼要在控制層獲取session資訊,服務層的物件是無狀態的,初始化的時候會儲存在會話池中(無狀態bean設計的初衷是為了節省資源開銷);而每一個訪問請求都會建立一個獨立的上下文物件,裡面的資訊是當前物件獨享的,所以能保證獲取使用者session資訊的完整性和正確性