程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 多Web服務器之間共享Session的解決方案

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

編輯:關於PHP編程

  很多開發中涉及到用戶的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的經典文章:http://linux.vbird.org/linux_server/0330nfs.php)

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved