常見的幾種方法如下:
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)
4. 利用Mysql資料庫共享Session資料的方式
這個方式與NFS的方式類似,也是採用一臺Mysql伺服器做共享伺服器,把所有的session的資料儲存到Mysql伺服器上,所有Web伺服器都來這臺Mysql伺服器來獲取Session資料。缺點也是依賴性太強,Mysql無法工作了影響所有的Web伺服器,當然,可以考慮多太Mysql資料庫來共享session,使用同步Mysql資料的方式。
(Mysql同步我寫過文章:http://blog.csdn.net/heiyeshuwu/archive/2005/10/31/520007.aspx)
5. 使用硬體裝置
這個算是比較成熟的解決方案了,使用類似BIG-IP的負載裝置來實現資源共享,那麼就能夠又穩定又合理的的共享Session了。目前很多入口網站採用這種方式。缺點很明顯了,就是要收費了,硬體裝置肯定需要購買成本的,不過對於專業或者大型應用來講,是比較合理並且值得的。
(關於BIG-IP裝置:http://www.f5.com.cn/channel.php?channel=product&type=BIG-IP-%D3%A6%D3%C3%C1%F7%C1%BF%B9%DC%C0%ED&id=36)