Session

Session

Cookie 和 Session

區別與聯繫

  1. 由於HTTP協議是無狀態的協議,所以服務端需要記錄用戶的狀態時,就需要用某種機制來識具體的用戶,這個機制就是Session
    典型的場景比如購物車,當你點擊下單按鈕時,由於HTTP協議無狀態,所以並不知道是哪個用戶操作的,所以服務端要爲特定的用戶創建了特定的Session,用用於標識這個用戶並且跟蹤用戶,這樣才知道購物車裏面有幾件物品。這個Session是保存在服務端的,有一個唯一標識。在服務端保存Session的方法很多,內存、數據庫、文件、集羣等。
  2. 服務端如何識別特定的客戶?第一次創建Session的時候,服務端會在HTTP協議中告訴客戶端,需要在 Cookie 裏面記錄一個Session ID,以後每次請求把這個會話ID發送到服務器,就可以依據此來識別不同客戶端了。
    如果客戶端的瀏覽器禁用了 Cookie 怎麼辦?一般這種情況下,會使用一種叫做URL重寫的技術來進行會話跟蹤,即每次HTTP交互,URL後面都會被附加上一個諸如 sid=xxxxx 這樣的參數,服務端據此來識別用戶。

總結:

  1. Session是在服務端保存的一個數據結構,用來跟蹤用戶的狀態,這個數據可以保存在集羣、數據庫、文件中;
  2. Cookie是客戶端保存用戶信息的一種機制,用來記錄用戶的一些信息,也是實現Session的一種方式

來源鏈接:https://www.zhihu.com/questio...

什麼是session?

  1. 服務器通過Cookie發送給客戶端一個sessionID
  2. sessionID對應服務器裏的一小塊內存,這裏保存着用戶的信息,例如登錄信息,購物車信息等。
  3. 每次用戶訪問服務器的時候,服務器通過瀏覽器發送來的cookie裏的sessionID去讀取對應的內存裏的信息,以此來知道用戶的隱私信息。

注意

  1. session的好處是防止用戶隨意篡改cookie,獲取別人的信息。
  2. 如果用戶隨意篡改了sessionID,那麼只能重新登錄。
  3. 因爲sessionID是隨機數,或者隨機數夾雜着一些字母,所以沒有可能暴力破解sessionID,獲取別的用戶的信息。

clipboard.png

類比:session相當於發會員卡,會員卡上只有卡號(sessionID)。下次去健身房的時候,只要看卡號上,就能確定你本人的去他信息。
而cookie相當於把信息都寫在會員卡上了。

關於session的實現代碼演示(nodejs)

總結

Session 與 Cookie 的關係

一般來說,Session 基於 Cookie 來實現。

Cookie

  1. 服務器通過 Set-Cookie 頭給客戶端一串字符串
  2. 客戶端每次訪問相同域名的網頁時,必須帶上這段字符串
  3. 客戶端要在一段時間內保存這個Cookie
  4. Cookie 默認在用戶關閉頁面後就失效,後臺代碼可以任意設置 Cookie 的過期時間
  5. 大小大概在 4kb 以內

Session

Session(不翻譯,或翻譯爲會話)

  1. 將 SessionID(隨機數)通過 Cookie 發給客戶端
  2. 客戶端訪問服務器時,服務器讀取 SessionID
  3. 服務器有一塊內存(哈希表)保存了所有 session
  4. 通過 SessionID 我們可以得到對應用戶的隱私信息,如 id、email
  5. 這塊內存(哈希表)就是服務器上的所有 session
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章