我這裡提供兩種解決方案
一、使用spring-session框架
二、使用token代替session
兩種方案開展起來都比較容易,個人推薦第二種。
不過今天我要講解的是第一種。
1.引入pom
org.springframework.session<
/groupid>
spring-session-data-redis<
/artifactid>
<
/dependency>
org.apache.commons<
/groupid>
commons-pool2<
/artifactid>
<
/dependency>
redis.clients<
/groupid>
jedis<
/artifactid>
<
/dependency>
2.yml檔案加入redis配置
redis
:hostname
: 188.131.155.46
port
:6379
password
:123456
3.加入配置類
public
class
sessionconfig")
string hostname;
@value
("$"
)int port;
@value
("$"
) string password;
@bean
public jedisconnectionfactory connectionfactory()
}
實現原理:
就是當web伺服器接收到http請求後,當請求進入對應的filter進行過濾,將原本需要由web伺服器建立會話的過程轉交給spring-session進行建立,本來建立的會話儲存在web伺服器記憶體中,通過spring-session建立的會話資訊可以儲存第三方的服務中,如:redis,mysql等。web伺服器之間通過連線第三方服務來共享資料,實現session共享!
session共享問題
http協議是無狀態的 第一次訪問會生成jsessionid儲存在tomcat的concurrentmap裡伺服器,把jsessionid寫到客戶端的cookie裡面。關於cookie和session的聯絡 cookie中會包含哪些資訊 名字 值 過期時間 路徑 域 cookie會帶到http請求偷...
session共享問題
1,spring session使用的場景?httpsession是通過servlet容器進行建立和管理的,在單機環境中。通過http請求建立的session資訊是儲存在web伺服器記憶體中,如tomcat jetty。假如當使用者通過瀏覽器訪問應用伺服器,session資訊中儲存了使用者的登入資訊...
併發session共享問題
讓負載均衡器能夠根據每次的請求的會話標識來進行請求的 這樣就能保證每次都能落到同一臺伺服器上面,這種方式稱為session sticky方式。如下圖 存在問題 1.如果這一台web伺服器宕機或者重啟了,伺服器上的會話資料會丟失,使用者需要重新登陸等。2.會話標識是應用層的資訊,那麼負載均衡器要將同乙...