Stories

Detail Return Return

如何理解Cookie、Session、Token? - Stories Detail

一、前情提要

由於許多文章更多是這三者的總結和比較,而本文主要是對Cookie、Session、Token的理解,因此並不涉及到具體的優缺點、生命週期等細節的東西

二、Cookie

1.Cookie的本質:過去我們去奶茶店買奶茶的時候,他會給你一張紙卡,你每消費一次,這張紙卡就會記錄一次你的消費記錄

2.Cookie存在的問題

  • 由於你每次都需要記錄(比如説奶茶店會給你蓋章表示喝奶茶一次),Cookie的長度通常來説比較長(蓋章太多),這樣服務端和客户端之間傳遞的信息量就會比較大
  • Cookie不安全,由於在客户端進行存儲,別人可以根據本地的Cookie來進行偽裝,從而對服務端的安全產生威脅
  • 由於在客户端進行存儲,當在A電腦登錄時,能傳遞信息給客户端,但當在B電腦登錄時,卻沒有了。比如我想在任何設備查看購物車信息就沒有辦法通過Cookie進行存儲

三、Session

1.session的本質:當我們去奶茶店買奶茶的時候,他會給你一張卡,上面有卡號,我們可以通過卡號,你每消費一次,讓店員在操作機上給你記錄一次
2.解決上面Cookie的問題

  • 由於SessionID(卡號)是一串數字,相對於Cookie來説(蓋章),它是沒有那麼長的,這樣客户端和服務端之間傳遞的信息量就小
  • 假設使用Cookie實現Session時,由於客户端只存儲了SessionID,那麼即使SessionID被竊取,也不會對服務端的安全產生影響,只會對你的信息產生影響罷了(誰讓你自己丟了呢?doge)

四、Token

1.為什麼要引入Token?

  • 細心的同學可能發現了,Cookie存在的第三個問題呢,怎麼Session沒解決掉呢,而這就是我們為什麼要引入Token的原因之一
  • 服務器需要存儲SessionID,這會加大服務端的壓力,而Token不需要存儲在服務端
  • 在分佈式中,如果我們沒有存儲SessionID的服務器B去請求服務器A,會出現無法請求的情況

2.Token的驗證過程(注意這裏不是服務器端和token進行比較,他是整個token中已經含有了簽名,讓token自己含有的簽名和破解密鑰後的簽名進行比較)

image.png

Add a new Comments

Some HTML is okay.