分布式常見問題之session問題

2021-10-02 13:27:12 字數 802 閱讀 8895

1.1session定義

當使用者在應用程式的 web 頁之間跳轉時,儲存在 session 物件中的變數將不會丟失,而是在整個使用者會話中一直存在下去。當使用者請求來自應用程式的 web 頁時,如果該使用者還沒有會話,則 web 伺服器將自動建立乙個 session 物件。當會話過期或被放棄後,伺服器將終止該會話。簡單來說就是用於客戶端與伺服器通訊會話技術。

1.2session實現原理

客戶向伺服器端傳送請求後,在伺服器端建立 session ,返回sessionid給客戶端瀏覽器儲存在本地,當下次傳送請求的時候,在請求頭中傳遞sessionid獲取對應的從伺服器上獲取對應的sesison物件資訊。

注意:httpsession session = request.getsession(false);在獲取session的時候需要穿入引數false(不會建立新的sessionid,這樣才會獲取到同乙個sessionid)

2.分布式下產生session的原因

session是在伺服器中建立的物件,而分布式情況下,在不同的伺服器,就會有不同session的問題。

3.解決不同session的方案

spring-session-data-redis + redis:將sessionid快取在redis中。spring-session-data-redis包中已經幫忙處理好了,只需要匯入對應的依賴,很方便的解決方法。(重要明確存在的問題,及解決原理)

session存在本地cookie中(不推薦,不安全)

token代替session,其實就是將值存入redis中,使用的時候在取出對應的value值。(redis在分布式中是可以共享的)

分布式面試 分布式鎖的常見問題

一般實現分布式鎖都有哪些方式?使用 redis 如何設計分布式鎖?使用 zk 來設計分布式鎖可以嗎?這兩種分布式鎖的實現方式哪種效率比較高?其實一般問問題,都是這麼問的,先問問你 zk,然後其實是要過度到 zk 關聯的一些問題裡去,比如分布式鎖。因為在分布式系統開發中,分布式鎖的使用場景還是很常見的...

分布式session共享

為什麼會出現session共享問題?客戶端與伺服器互動時會產生唯一的sessionid用於標記使用者,但是在分布式架構中,如果還是採用 session 的方式,使用者發起請求,通過 nginx 做請求 時,並不知道是 到伺服器1還是伺服器2,所以就會出現session共享問題。今天主要記錄使用 sp...

session分布式處理

在支援session複製的web伺服器上,通過修改web伺服器的配置,可以實現將session同步到其他web伺服器上,達到每個web伺服器上都儲存一致的session。1.優點 上不需要做支援和修改。2.缺點 需要依賴支援的web伺服器,一旦更換成不支援的web伺服器就不能使用了,在資料量很大的情...