Session
Cookie 和 Session
區別與聯繫
- 因爲HTTP協議是無狀態的協議,因此服務端須要記錄用戶的狀態時,就須要用某種機制來識具體的用戶,這個機制就是Session。
典型的場景好比購物車,當你點擊下單按鈕時,因爲HTTP協議無狀態,因此並不知道是哪一個用戶操做的,因此服務端要爲特定的用戶建立了特定的Session,用用於標識這個用戶,而且跟蹤用戶,這樣才知道購物車裏面有幾件物品。這個Session是保存在服務端的,有一個惟一標識。在服務端保存Session的方法不少,內存、數據庫、文件、集羣等。
- 服務端如何識別特定的客戶?第一次建立Session的時候,服務端會在HTTP協議中告訴客戶端,須要在 Cookie 裏面記錄一個Session ID,之後每次請求把這個會話ID發送到服務器,就能夠依據此來識別不一樣客戶端了。
若是客戶端的瀏覽器禁用了 Cookie 怎麼辦?通常這種狀況下,會使用一種叫作URL重寫的技術來進行會話跟蹤,即每次HTTP交互,URL後面都會被附加上一個諸如 sid=xxxxx 這樣的參數,服務端據此來識別用戶。
總結:node
- Session是在服務端保存的一個數據結構,用來跟蹤用戶的狀態,這個數據能夠保存在集羣、數據庫、文件中;
- Cookie是客戶端保存用戶信息的一種機制,用來記錄用戶的一些信息,也是實現Session的一種方式。
來源連接:https://www.zhihu.com/questio...git
什麼是session?
- 服務器經過Cookie發送給客戶端一個sessionID
- sessionID對應服務器裏的一小塊內存,這裏保存着用戶的信息,例如登陸信息,購物車信息等。
- 每次用戶訪問服務器的時候,服務器經過瀏覽器發送來的cookie裏的sessionID去讀取對應的內存裏的信息,以此來知道用戶的隱私信息。
注意
- session的好處是防止用戶隨意篡改cookie,獲取別人的信息。
- 若是用戶隨意篡改了sessionID,那麼只能從新登陸。
- 由於sessionID是隨機數,或者隨機數夾雜着一些字母,因此沒有可能暴力破解sessionID,獲取別的用戶的信息。

類比:session至關於發會員卡,會員卡上只有卡號(sessionID)。下次去健身房的時候,只要看卡號上,就能肯定你本人的去他信息。
而cookie至關於把信息都寫在會員卡上了。github
關於session的實現代碼演示(nodejs)數據庫
總結
Session 與 Cookie 的關係
通常來講,Session 基於 Cookie 來實現。瀏覽器
Cookie
- 服務器經過
Set-Cookie
頭給客戶端一串字符串
- 客戶端每次訪問相同域名的網頁時,必須帶上這段字符串
- 客戶端要在一段時間內保存這個Cookie
- Cookie 默認在用戶關閉頁面後就失效,後臺代碼能夠任意設置 Cookie 的過時時間
- 大小大概在 4kb 之內
Session
Session(不翻譯,或翻譯爲會話)服務器
- 將 SessionID(隨機數)經過 Cookie 發給客戶端
- 客戶端訪問服務器時,服務器讀取 SessionID
- 服務器有一塊內存(哈希表)保存了全部 session
- 經過 SessionID 咱們能夠獲得對應用戶的隱私信息,如 id、email
- 這塊內存(哈希表)就是服務器上的全部 session