java集群session共享_分布式/集群下session共享方案汇总
1、F5 BIG-IP 硬件實現session粘性復制
F5 硬件,可以作為HTTP負載均衡器使用,可以將用戶IP與Session通過F5進行的綁定,使其Session保持一致性。是直接通過智能交換機實現負載,與系統無關。了解不多,簡單說就這么多。
2、Nginx 的ip_hash特性對訪問IP和服務器進行綁定
當某個ip下的客戶端請求指定(固定,因為根據IP地址計算出一個hash值,根據hash值來判斷分配給那臺服務器,從而每次該ip請求都分配到指定的服務器)的服務器,這樣就可以保證有狀態請求的狀態的完整性,不至于出現狀態丟失的情況。缺點: ip_hash方案必須保證Nginx是最前端的服務器(接受真實的ip),如果nginx不是最前端的服務器,還存在中間件(中間服務器什么的),那么nginx獲取的ip地址就不是真實的ip地址,那么這個ip_hash就沒有任何意義。
3、將session保存到nosql數據庫中(推薦)
這個方案有很多種方式:1、 使用框架的會話管理工具spring-session ;2、 使用shiro這種自帶session(非httpsession)的權限框架 。
可以存到redis 或者 memcache 中。
先說第一種,它替換了Servlet那一套會話管理,既不依賴容器,又不需要改動代碼,并且是用了spring-data-redis那一套連接池,可以說是最完美的解決方案。
第二種前提你的項目中用到了shiro, 需要重寫shiro的SessionDao將session存入redis來實現session共享,可以自己重寫或者找現成的(shiro-redis)。
4、使用Cookie共享session
Java Web的共用的用戶鑒權機制是采用Session-Cookie技術,實現原理是:用戶登錄時,請求到達服務器,服務器調用通過getSession()方法判斷session是否存在,如果不存在,則新建session,并通過其算法為session生成一個隨機數作為sessionId,開發者可在session中儲存一些用戶信息;第二次請求時,如獲取用戶信息,getSession()方法判斷session存在,則取出session,而不是新建,從而從session中獲取到用戶的相關信息。
客戶端請求時,可以將cookie信息儲存于request的head中發送給服務器;
服務器響應時,可以將cookie信息置于response中回傳給客戶端。
此方案可以說是獨辟蹊徑了,將分布式思想用到了極致。如上文分析所說,session-cookie機制中,session與cookie相互關聯,以cookie做中轉站,用來找到對應的session,其中session存放在服務器。那么如果將session中的內容存放在cookie中呢,那么則省略了服務器保存session的過程,后臺只需要根據cookie中約定的標識進行鑒權校驗即可。
此法, 受http協議頭長度限制,cookie中存儲的信息不宜過多 ,同時cookie在瀏覽器可以被看到,不太安全,需要進行加密處理。
至于常用的web容器,tomcat和weblogic都有自己的session共享方案,后面再研究。
總結
以上是生活随笔為你收集整理的java集群session共享_分布式/集群下session共享方案汇总的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2022全球动力电池装机量排行榜:宁德时
- 下一篇: 经典再现 小米新旗舰“又双叒叕”泄密了