多Web伺服器之間共享Session的解決方案

2021-08-30 16:43:45 字數 1714 閱讀 8541

非常多研發中涉及到使用者的session驗證非常保留的問題,這個問題比較有意思,總結了幾種方案,只供參考。

[  問題提出 ]

為了滿足足夠大的應用,滿足更多的客戶,於是我們架設了n臺web伺服器(n>=2),在多台web伺服器的情況下,我們會涉及到乙個問題:使用者登陸一台伺服器以後,如果在跨越到另一台伺服器的時候能夠繼續使用客戶的session?

(以下描述方案只是針對linux/unix + apache + mysql + php的研發架構,當然,也能擴充套件到其他平台。)

[  問題解決方案 ]

既然我們的問題已擺在面前了,那麼就要從技術角度去解決問題,給我們的客戶更好的體驗,總結了幾個方案。

1. 寫客戶端cookie的方式

當使用者登陸成功以後,把**網域名稱、使用者名稱、密碼、token、session有效時間全部採用cookie的形式寫入到客戶端的cookie裡面,如果使用者從一台web伺服器跨越到另一台伺服器的時候,我們的程式主動去檢測客戶端的cookie資訊,進行判斷,然後提供對應的服務,當然,如果cookie過期,或無效,自然就不讓使用者繼續服務了。當然,這種方法的弊端就不言而喻了,比如客戶端禁用了cookie或cookie被黑客竊取了呢?

2. 伺服器之間session資料同步的方式

假設web伺服器a是所有使用者登陸的伺服器,那麼當使用者驗證登陸一下,session資料就會寫到a伺服器裡,那麼就能自己寫指令碼或守護程序來自動把session資料同步到其他web伺服器,那麼當使用者跳轉到其他伺服器的時候,那麼session資料是一致的,自然就能夠直接進行服務無須再次登陸了。缺點是,可能會速度慢,不穩定,如果是單向同步的話,登陸伺服器出現問題,那麼其他伺服器也無法服務,當然也能考慮雙向同步的問題。

3. 利用nfs共享session資料的方式

其實這個方案和下面的mysql方案類似,只是儲存方式不相同。大致就是有一台公共的nfs伺服器(network file server)做共享伺服器,所有的web伺服器登陸的時候把session資料寫到這台伺服器上,那麼所有的session資料其實都是儲存在這台nfs伺服器上的,不論使用者訪問那太web伺服器,都要來這台伺服器獲取session資料,那麼就能夠實現共享session資料了。缺點是依賴性太強,如果nfs伺服器down掉了,那麼大家都無法工作了,當然,能考慮多台nfs伺服器同步的形式。

(關於nfs的經典文章:

4. 利用mysql資料庫共享session資料的方式

這個方式和nfs的方式類似,也是採用一台mysql伺服器做共享伺服器,把所有的session的資料儲存到mysql伺服器上,所有web伺服器都來這台mysql伺服器來獲取session資料。缺點也是依賴性太強,mysql無法工作了影響所有的web伺服器,當然,能考慮多太mysql資料庫來共享session,使用同步mysql資料的方式。

(mysql同步我寫過文章:

5. 使用硬體裝置

這個算是比較成熟的解決方案了,使用類似big-ip的負載裝置來實現資源共享,那麼就能夠又穩定又合理的的共享session了。目前非常多門戶**採用這種方式。缺點非常明顯了,就是要收費了,硬體裝置肯定需要購買成本的,不過對於專業或大型應用來講,是比較合理並且值得的。

(關於big-ip裝置:

以上這些只是我的個人愚見,沒有經過試驗,不確保其準確實在性,只是提供一種想法和參考。

多Web伺服器之間共享Session的解決方案

一 提出問題 為了滿足足夠大的應用,滿足更多的客戶,於是我們架設了n臺web伺服器 n 2 在多台web伺服器的情況下,我們會涉及到乙個問題 使用者登陸一台伺服器以後,如果在跨越到另一台伺服器的時候能夠繼續使用客戶的session?二 解決方案 1.寫客戶端cookie的方式 當使用者登陸成功以後,...

多Web伺服器之間共享Session的解決方案

多web伺服器之間共享session的解決方案 很多開發中涉及到使用者的session驗證很保留的問題,這個問題比較有意思,總結了幾種方案,只供參考。問題提出 為了滿足足夠大的應用,滿足更多的客戶,於是我們架設了n臺web伺服器 n 2 在多台web伺服器的情況下,我們會涉及到乙個問題 使用者登陸一...

多Web伺服器之間共享Session的解決方案

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!多web伺服器之間共享session的解決方案 很多開發中涉及到使用者的session驗證很保留的問題,這個問題比較有意思,總結了幾種方案,只供參考。問題提出 為了滿足足夠大的應用,滿足更多的客戶,於是我們架設了n臺web伺服器 n 2 在多台we...