淺談 session 會話的原理
阿新 • • 發佈:2019-01-18
ESS 瀏覽器 Nid 了解 網絡 block 隨機 狀態 原理
先談 cookie
網絡傳輸基於的Http協議,是無狀態的協議,即每次連接斷開後再去連接,服務器是無法判斷此次連接的客戶端是誰。
如果每次數據傳輸都需要進行連接和斷開,那造成的開銷是很巨大的。
為了解決這個問題,cookie就應運而生,當用戶登陸成功,服務器會在返回響應數據的同時也攜帶著cookie給到客戶端,
之後客戶端每次發起請求只要攜帶著這個cookie,那就免去登錄的步驟。cookie是保存在客戶端的數據。
這確實極大改善了網絡傳輸的效率。當時由於cookie是保存在瀏覽器客戶端的,所以也很容易被提取,這在安全方面存在隱患。
再談session
session的實現需要依賴於cookie,其本質也是通過以cookie的方式向客戶端發送隨機字符串,每次客戶端發起請求時只要攜帶
該隨機字符串便可很容易進行驗證。下面大概寫下整個session過程的原理。
- 用戶發出登錄請求
- 判斷賬戶密碼是否正確
- 如正確,則返回數據並在cookie中寫隨機字符串(sessionID),並且在服務端以{隨機字符串:{‘k‘:‘v‘}}的形式存儲用戶相關數據
- 下次同個客戶發送請求,攜帶cookie(包含sessionID)
- 服務端會判斷cookie是否包含sessionID,如有再去服務器內存中查詢該sessionID 是否有對應的數據,如果有,則說明是登錄過的用戶,返回數據。
session是保存在服務端的數據。
由此可見,session是不會向客戶端發送敏感信息的,隨機字符串即使被人竊取,也無法簡單在客戶端被惡意行為偽造請求。
淺談 session 會話的原理