Session共享及實現的方法

2022-05-08 02:39:09 字數 1062 閱讀 2175

當**業務規模和訪問量的逐步增大,原本由單台伺服器、單個網域名稱組成的**架構可能已經無法滿足發展需要

如果我們把**程式分別部署到多台伺服器上,而且獨立為幾個二級網域名稱,由於session存在實現原理上的侷限性(例如php中session預設以檔案的形式儲存在本地伺服器的硬碟上),這使得**使用者不得不經常在幾個頻道間來回輸入使用者名稱和密碼登入,另外,原本程式可以直接從使用者session變數中讀取的資料(如暱稱、積分、登入時間等),因為無法跨伺服器同步更新session變數,迫使開發人員必須實時讀寫資料庫,從而增加了資料庫的負擔

(1)基於cookie的session共享

其原理是將全站使用者的session資訊加密、序列化後以cookie的方式統一種植在根網域名稱下(如.host.com)。當瀏覽器訪問該根網域名稱下的所有二級網域名稱站點時,將與網域名稱相對應的所有cookie內容的特性傳遞給它,從而實現使用者的cookie化session在多服務間的共享訪問

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

(2)基於資料庫的session共享

把session資訊儲存在資料庫中,通常使用記憶體表,以提高session操作的讀寫效率

這個方案的實用性比較強,應用較為普遍。缺點在於session的併發讀寫能力取決於mysql資料庫的效能,同時需要我們自己來實現session淘汰邏輯,以便定時從資料表中更新、刪除session記錄,當併發過高時容易出現表鎖,對資料庫造成較大壓力

(3)基於memcache的session共享

memcache是一款基於libevent的多路非同步i/o技術的記憶體共享系統,簡單的key+value資料儲存模式使其**邏輯小巧高效,因此在併發處理能力上佔據了絕對優勢

memcache的記憶體hash表所特有的expires資料過期淘汰機制,正好和session的過期機制不謀而合,這就降低了刪除過期session資料的**複雜度

Session共享方法

session複製 每台機器上需要儲存所有的session資訊,機器多的話太大,已經很少有人會使用 nginx通過hash ip來給不同使用者指定固定的機器,session也存在固定的機器上 如果某台服務宕機,則會丟失session 利用cookie記錄 受限於cookie大小,而且每次響應都需要傳...

php實現session共享的例項方法

為什麼要session共享?現在稍微大一點的 基本上都有好幾個子網域名稱,比如www.xz577.com,xz577.com,vip.xz577.com,這些 如果需要共用使用者登入資訊,那麼就需要做到session共享,當然前提是有相同的主網域名稱。php的session原理?客戶端訪問php頁面...

如何實現session共享

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