通過redis使雙系統session共享的解決思路

2021-07-31 22:11:27 字數 2570 閱讀 6671

兩個系統a和b

a為主,b為次

登入入口是a

a登入時,生成乙個隨機碼token,例如uuid

將token做為key,userid做為value,存入redis,設定過期時間

將token存入cookie,設定過期時間,設定domain

a,b系統通過cookie獲取token,然後從redis獲取userid

登出時,刪除redis中的token,刪除cookie

a登入時,將資訊存入session,然後生成乙個隨機碼token,例如uuid

將token做為key,session做為value,存入redis,設定過期時間

將token存入cookie,設定過期時間,設定domain

a,b系統通過cookie獲取token,然後從redis獲取session

判斷從redis獲取的session和原來的session是否一致,若不一致,則需要覆蓋原來的session(主要為了防止重複覆蓋和session不一致)

登出時,刪除redis中的token,刪除cookie

a系統 login:

// 系統session

session.set("userid","firetw");

...// session資訊存入map

// 隨機token

string token=uuid.randomuuid().tostring().tolowercase().replace("-", "");

// userid存入redis

redisutil.setstring("token_"+token, bean.getuserid(), pcexpire);

// sessionmap存入redis

redisutil.setmap("session_"+token, sessionmap, pcexpire);

//token存入cookie

cookie cookie = new cookie("wx_token", token);

cookie.setpath("/");

cookie.setdomain(".zpfdomain.com");

cookie.setmaxage(pcexpire);

response.addcookie(cookie);

a,b系統公用sessionutils

/**

*@param request

*/public

static

void

// 獲取redis的session

mapsessionmap = sessionutils.getsessionmap(request);

if (maputils.isempty(sessionmap)) else

}}/**

* 從redis中獲取session

/** * 獲取cookie中的token

* 根據名字獲取cookie(介面方法)

* *@author

*@param request

*@param name

* cookie名字

* 將cookie封裝到map裡面(非介面方法)

}

登出 logout

解決java集群的session共享的解決方案

1.客戶端cookie加密。一般用於內網中企業級的系統中,要求使用者瀏覽器端的cookie不能禁用,禁用的話,該方案會失效 2.集群中,各個應用伺服器提供了session複製的功能,tomcat和jboss都實現了這樣的功能。特點 效能隨著伺服器增加急劇下降,容易引起廣播風暴 session資料需要...

多Web伺服器之間共享Session的解決方案

一 提出問題 為了滿足足夠大的應用,滿足更多的客戶,於是我們架設了n臺web伺服器 n 2 在多台web伺服器的情況下,我們會涉及到乙個問題 使用者登陸一台伺服器以後,如果在跨越到另一台伺服器的時候能夠繼續使用客戶的session?二 解決方案 1.寫客戶端cookie的方式 當使用者登陸成功以後,...

多Web伺服器之間共享Session的解決方案

多web伺服器之間共享session的解決方案 很多開發中涉及到使用者的session驗證很保留的問題,這個問題比較有意思,總結了幾種方案,只供參考。問題提出 為了滿足足夠大的應用,滿足更多的客戶,於是我們架設了n臺web伺服器 n 2 在多台web伺服器的情況下,我們會涉及到乙個問題 使用者登陸一...