先說下我是怎麼實現分布式session的
使用者登陸那段**裡面,使用者登陸成功,我會通過uuid生成乙個值作為token,將token返給前端並同時將該token為key,使用者的id為value儲存到redis中,並設定3天的過期時間。面試官:你這個設計有問題呀,如果使用者正在操作呢,而此時token的過期時間已經到了,使用者會被強制退出,這樣使用者體驗會很不好呀?使用者登陸成功後訪問其他頁面的時候,會被我配置的***進行攔截,在請求裡面。request.getheader(「token」);獲取到前端傳遞的token值,然後去redis中找到對應的使用者id,將使用者的資訊 request.setattribute(「uid」);
以上是我的乙個分布式session功能的實現。
想一想,你會怎麼解決這個問題呢?
解決方案:(不希望每次攔截使用者請求的時候都重新重新整理token的過期時間值)
springboot中的spring session能解決問題
給出的答案,我沒有去測試,只找到了篇blog:springboot(八)springboot整合springsession實現分布式session共享
自己的解決辦法:使用者登陸的時候,除了儲存上述的key,額外使用 token+時間戳作為key(簡稱tt-key吧),value依舊是使用者id,在***中多增加一段業務邏輯:如果當前的時間和tt-key中時間戳相差小於一天,我們就將token中的過期時間重新整理。這樣就不會出現上面的情況,也保證了不會使用者的每次請求都重新整理token的過期時間值了。
分布式session共享
為什麼會出現session共享問題?客戶端與伺服器互動時會產生唯一的sessionid用於標記使用者,但是在分布式架構中,如果還是採用 session 的方式,使用者發起請求,通過 nginx 做請求 時,並不知道是 到伺服器1還是伺服器2,所以就會出現session共享問題。今天主要記錄使用 sp...
session分布式處理
在支援session複製的web伺服器上,通過修改web伺服器的配置,可以實現將session同步到其他web伺服器上,達到每個web伺服器上都儲存一致的session。1.優點 上不需要做支援和修改。2.缺點 需要依賴支援的web伺服器,一旦更換成不支援的web伺服器就不能使用了,在資料量很大的情...
分布式session共享
什麼是session 伺服器為每個使用者建立乙個會話,儲存使用者的相關資訊,以便多次請求能夠定位到同乙個上下文。當使用者請求來自應用程式的 web 頁時,如果該使用者還沒有會話,則 web 伺服器將自動建立乙個 session 物件。當會話過期或被放棄後,伺服器將終止該會話並銷毀。分布式sessio...