使用nginx+tomcat進行負載均衡時,希望使用輪詢方式進行負載。但是如果使用輪詢方式的話,可能會訪問不同的tomcat,此時如果不進行session共享,則相當於是乙個新的session。就比如現有系統都是需要認證登入的系統,如果沒有session共享,則會導致使用者退出登入。
當我們使用了nginx做專案集群以後,就會出現乙個很嚴重的問題,那就是:tomcat集群之間如何實現session共享的問題,如果這個問題不解決,就會出現登陸過後再次請求資源依舊需要登陸的問題。session共享有多種方案,主要說session存入redis,其實也挺簡單的
shiro-redis.jar不會讓你寫任何**,主要寫配置檔案就好,session怎麼存入redis的根本不用寫,剛開始沒用shiro-redis這個jar,用的是自己的實現
實現方式:
自己實現乙個redissessiondao extends enterprisecachesessiondao
重寫了docreate(),readsession(),doreadsession(),doupdate(),dodelete()通過redis讀寫session的方法
反正挺麻煩的,還會報一些錯,比如序列化和反序列化這些,後面看到shiro-redis就直接換了
新增依賴
shiro-redis.xmlorg.crazycake
shiro-redis
2.4.2.1-release
redis.clients
jedis
2.7.2
redis.properties<?xml version="1.0" encoding="utf-8"?>
/login.jsp = anon
/layui/** = anon
/jquery/** = anon
/images/** = anon
/js/** = anon
/assets/** = anon
/verifycode.do=anon
/logout.do = logout
/**=authc
配置好就可以了#sessionid存入cookie名字
redismanager.sessionname=sid
#ipredismanager.host=127.0.0.1
#埠redismanager.port=6379
#redis key過期時間
redismanager.timeout=1800000
#存入redis key的字首
redismanager.prefix=shiro_session_
#redis 密碼
redismanager.password=root
session存入redis中
最後部署兩個tomcat上,配置好nginx就ok
分布式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...