3 利用Cookie 記錄Session
早期系統使用C/S架構,一種管理Session的方式是将Session記錄在用戶端,每次請求伺服器的時候,将Session放在請求中發送給伺服器,伺服器處理完請求後再将修改過的Session響應給用戶端
如今的B/S架構,網站沒有用戶端,但是可以利用劉覽器支援的Cookie記錄Session
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5yYxIzMjZ2YwEjZ4EzMlJjYxUGN0cTOxUTN2MzMwMjZm9CX5d2bs92Yl1iclB3bsVmdlR2LcNWaw9CXt92Yu4GZjlGbh5yYjV3Lc9CX6MHc0RHaiojIsJye.png)
3.1 缺點
- 受Cookie大小限制,能記錄的資訊有限
- 每次請求響應都需要傳輸Cookie,影響性能
- 如果使用者關閉Cookie,通路就會不正常
但是
3.2 優點
由于Cookie的
- 簡單易用
- 可用性高
- 支援應用伺服器的線性伸縮
- 而大部分應用需要記錄的Session 資訊又比較小
是以事實上,許多網站都或多或少地使用Cookie記錄Session。
4 Session伺服器
那麼有沒有可用性高、伸縮性好、性能也不錯,對資訊大小又沒有限制的伺服器叢集Session管理方案呢?
答案就是Session伺服器!利用獨立部署的Session伺服器(叢集)統一管理Session,應用伺服器每次讀寫Session時,都通路Session伺服器
這種方案事實上是将應伺服器的狀态分離,分為
- 無狀态的應用伺服器
- 有狀态的Session伺服器
然後針對這兩種伺服器的不同特性分别設計其架構
對于有狀态的Session伺服器,一種比較簡單的方法是利用
分布式緩存
即使用cacheDB存取session資訊,應用伺服器接受新請求将session資訊儲存在redis中,當應用伺服器發生故障時,web伺服器會周遊尋找可用節點,分發請求,當應用伺服器發現session不在本機記憶體時,則去redis中查找,如果找到則複制到本機,這樣實作session共享和高可用。
資料庫等
在這些産品的基礎上進行包裝,使其符合Session 的存儲和通路要求。如果業務場景對Session 管理有比較高的要求,比如利用Session 服務內建單點登入(SSO)、使用者服務等功能,則需要開發專門的Session服務管理平台。