不同應用伺服器,session怎麼共享

2021-10-01 13:55:45 字數 1428 閱讀 4706

一:通過資料庫mysql共享sessionid

方法一:將所有的session_id都儲存在mysql資料庫中,每一次請求來的時候都去檢查資料庫裡面sessionid的情況,達到sessionid同步的目的

方法二:將sessionid的表跟所有的表放在一起,如果mysql做了主從,需要每乙個資料庫都存在這張表,並且時時同步

優缺點:以上兩種方法,方法一比較好,分離了session表和業務表,減少了資料庫的壓力,mysql是基於磁碟的資料庫,讀寫本來就比較慢,如果讀寫頻繁的話,效率也很低,因此並不推薦這種辦法。

二.通過cookie共享session

將使用者訪問頁面產生的session資訊放在cookies中,以cookie為中轉站

當使用者訪問a伺服器時,生成session資訊並且儲存在cookie中,當使用者訪問分配到伺服器b時,先檢查伺服器有沒有session資訊,如果沒有的話,就把cookie裡面的session資訊同步到伺服器b

缺點:cookie共享session,安全性不高,被攔截或者偽造的可能性增大,如果客戶端禁止使用cookie,都有可能無法共享session

三.通過伺服器同步共享session

使用一台伺服器作為登入伺服器,當登入成功後,我們可以使用指令碼或者守護程序將session資訊同步到其它伺服器,這樣其它伺服器也有session資訊了,可以保持登入狀態了。

缺點:同步伺服器的速度很慢,可能等到下一次分發訪問後還沒同步完,而且一旦登入伺服器宕機之後,整個系統都不能執行

四.通過nfs共享session

nfs(network file system)可以讓不同的機器,不同的作業系統共享檔案。準備一台nfs伺服器,將所有生成的session資訊寫入到伺服器中,每次使用者訪問的時候,都來這個伺服器獲取session資訊,這樣就能共享session資訊了。

缺點:依賴性太強,如果nfs伺服器宕機,就無法工作了,當然可以考慮設定集群。

五.使用memcache來同步session

memcache是一套分布式的快取記憶體系統,memcache工作流程:當使用者訪問伺服器時,首先從memcache中獲取資料,如果獲取不到就從資料庫中獲取資料,並把資料同步到memcache中,第二次訪問的時候就能從memcache中獲取資料了。

因此無論什麼伺服器生成的session資訊儲存在memcache中,就可以共享sessionid了

優缺點:這種方式同步session,不會增加資料庫的負擔,而且比cookie安全的多,放在記憶體中,讀取速度也比較快

缺點:memcache中資料是用記憶體塊的形式儲存,不能完全利用記憶體,會產生記憶體碎片。而且memcache只存在記憶體中,一旦伺服器停止執行,資料就丟失了,

六.通過redis共享session

redis共享session和memcache一樣,都是將資料儲存在記憶體中,區別是redis會週期性的把更新的資料寫入到磁碟中或者把修改的操作追加到日誌檔案中,並且可以在此基礎上實現主從

應用伺服器集群Session管理

應用伺服器的高可用架構設計主要基於服務無狀態這一特性,但事實上,業務總是有狀態的,在交易類的電子商務 需要有購物車記錄使用者的購買記錄,使用者每次購買請求都是向購物車中增加商品來社交類 中,需要記錄使用者當前登陸狀態 最新發布的訊息及好友狀態等,使用者每次重新整理頁面都需要更新這些資訊。web應用中...

應用伺服器集群的session管理

首先,我們知道,http是無狀態的協議,應用伺服器不儲存業務的上下文資訊,而是進根據每次提交的資料進行相應的業務邏輯處理,因此所有的服務期完全對等,乙個請求由哪個伺服器來處理都是一樣的。因此,為了保證 的高可用,我們可以部署多個web伺服器,通過負載均衡的手段來緩解伺服器壓力 同時乙個伺服器掛掉了,...

應用伺服器集群的session管理

1 什麼是session a web應用中將這些多次請求修改使用的上下文物件稱作會話 session b session 物件儲存特定使用者會話所需的資訊。這樣,當使用者在應用程式的 web 頁之間跳轉時,儲存在 session 物件中的變數將不會丟失,而是在整個使用者會話中一直存在下去。c 當使用...