分佈式框架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信息的完整性和正確性

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章