實現session共享的方式有哪幾種?

2021-08-27 11:33:19 字數 1318 閱讀 5537

1. 基於nfs的session共享

nfs是net filesystem的簡稱,最早由sun公司為解決unix網路主機間的目錄共享而研發。

這個方案實現最為簡單,無需做過多的二次開發,僅需將共享目錄伺服器mount到各頻道伺服器的本地session目錄即可,缺點是nfs依託於複雜的安全機制和檔案系統,因此併發效率不高,尤其對於session這類高併發讀寫的小檔案,會由於共享目錄伺服器的io-wait過高,最終拖累前端web應用程式的執行效率。

2. 基於資料庫的session共享

首選當然是大名鼎鼎的mysql資料庫,並且建議使用記憶體表heap,提高session操作的讀寫效率。這個方案的實用性比較強,相信大家普遍在使用,它的缺點在於session的併發讀寫能力取決於mysql資料庫的效能,同時需要自己實現session淘汰邏輯,以便定時從資料表中更新、刪除 session記錄,當併發過高時容易出現表鎖,雖然我們可以選擇行級鎖的表引擎,但不得不否認使用資料庫儲存session還是有些殺雞用牛刀的架勢。

3. 基於cookie的session共享

這個方案我們可能比較陌生,但它在大型**中還是比較普遍被使用。原理是將全站使用者的session資訊加密、序列化後以cookie的方式,統一種植在根網域名稱下(如:.host.com),利用瀏覽器訪問該根網域名稱下的所有二級網域名稱站點時,會傳遞與之網域名稱對應的所有cookie內容的特性,從而實現使用者的cookie化session 在多服務間的共享訪問。

這個方案的優點無需額外的伺服器資源;缺點是由於受http協議頭信心長度的限制,僅能夠儲存小部分的使用者資訊,同時cookie化的 session內容需要進行安全加解密(如:採用des、rsa等進行明文加解密;再由md5、sha-1等演算法進行防偽認證),另外它也會占用一定的頻寬資源,因為瀏覽器會在請求當前網域名稱下任何資源時將本地cookie附加在http頭中傳遞到伺服器。

4. 基於memcache的session共享

memcache由於是一款基於libevent多路非同步i/o技術的記憶體共享系統,簡單的key + value資料儲存模式使得**邏輯小巧高效,因此在併發處理能力上佔據了絕對優勢,目前本人所經歷的專案達到2000/秒 平均查詢,並且伺服器cpu消耗依然不到10%。

另外值得一提的是memcache的記憶體hash表所特有的expires資料過期淘汰機制,正好和session的過期機制不謀而合,降低了過期session資料刪除的**複雜度,對比「基於資料庫的儲存方案」,僅這塊邏輯就給資料表產生巨大的查詢壓力。

如何實現session共享

首先我們應該明白,為什麼要實現共享,如果你的 是存放在乙個機器上,那麼是不存在這個問題的,因為會話資料就在這台機器,但是如果你使用了負載均衡把 請求分發到不同的機器呢?這個時候會話id在客戶端是沒有問題的,但是如果使用者的兩次請求到了兩台不同的機器,而它的session資料可能存在其中一台 機器,這...

Redis實現session共享

1.session共享是基於spring redis來實現的,首先從web.xml開始說起。2.在web.xml裡面配置了乙個filter,如下 springsessionrepositoryfilter org.springframework.web.filter.delegatingfilter...

web開發常用的session共享方式

在日常的web開發過程中,session共享有多種解決方式,常用的有以下幾種 將session資訊以加密的方式儲存在客戶端瀏覽器的cookie中,session資訊會隨每次請求再次提交到伺服器上。優點 可以減輕伺服器端的壓力。缺點 cookie大小是有限制的,只能儲存小部分使用者資訊 同時傳輸時,也...