1. 程式人生 > >cookie, session, token

cookie, session, token

cookie 指的就是瀏覽器裡面能永久儲存的一種資料

cookie由伺服器生成,傳送給瀏覽器,瀏覽器把cookie以kv形式儲存到某個目錄下的文字檔案內,下一次請求同一網站時會把該cookie傳送給伺服器。由於cookie是存在客戶端上的,所以瀏覽器加入了一些限制確保cookie不會被惡意使用,同時不會佔據太多磁碟空間,所以每個域的cookie數量是有限的。

Session

伺服器要知道當前發請求給自己的是誰。為了做這種區分,伺服器就要給每個客戶端分配不同的“身份標識”,然後客戶端每次向伺服器發請求的時候,都帶上這個“身份標識”,伺服器就知道這個請求來自於誰了。

伺服器使用session把使用者的資訊臨時儲存在了伺服器上,使用者離開網站後session會被銷燬。這種使用者資訊儲存方式相對cookie來說更安全,可是session有一個缺陷:如果web伺服器做了負載均衡,那麼下一個操作請求到了另一臺伺服器的時候session會丟失。

Token

在客戶端頻繁向服務端請求資料,服務端頻繁的去資料庫查詢使用者名稱和密碼並進行對比,判斷使用者名稱和密碼正確與否,並作出相應提示,在這樣的背景下,Token便應運而生。

Token的定義:Token是服務端生成的一串字串,以作客戶端進行請求的一個令牌,當第一次登入後,伺服器生成一個Token便將此Token返回給客戶端,以後客戶端只需帶上這個Token前來請求資料即可,無需再次帶上使用者名稱和密碼。最簡單的token組成:uid(使用者唯一的身份標識)、time(當前時間的時間戳)、sign(簽名,由token的前幾位+鹽以雜湊演算法壓縮成一定長的十六進位制字串,可以防止惡意第三方拼接token請求伺服器)。

使用Token的目的:Token的目的是為了減輕伺服器的壓力,減少頻繁的查詢資料庫,使伺服器更加健壯。

 

 

cookie分為setCookie和Cookie,前者為響應頭欄位,後者為請求頭欄位;而請求頭和響應頭均包含Session ID,響應頭包含的Session ID欄位是為了記錄使用者認證狀態,請求頭中Session ID是方便服務端來判斷客戶端是否為真實的使用者。接下來我們詳細看下兩者的區別:

1.session在伺服器端,cookie在客戶端(瀏覽器)

2.session預設被存在在伺服器的一個檔案裡(不是記憶體)

3.session的執行依賴session id,而session id 是存在cookie 中的,也就是說,如果瀏覽器禁用了cookie ,同時session 也會失效(但是可以通過其它方式實現,比如在 url 中傳遞 session_id)

 

 

 

Cookie

  cookie是訪問網站時,由網站伺服器返回的一種標記為cookie 型別資料,儲存在瀏覽器的上,以後每次訪問本完整,瀏覽器都會在http請求中將該資料傳送過來

 

Cookie作用

   目前Cookie最廣泛的是記錄使用者登入資訊,這樣下次訪問時可以不輸入自己的使用者名稱、密碼了

   當然了這種方便也存在使用者資訊洩密的問題,尤其在多個使用者公用一臺電腦時很容易出現這樣的問題。

Session會話 

 1. 當登入成功後,session第一次被建立,一個唯一的標識被儲存於本地的cookie中的sessionid中。

 2. 再次打卡瀏覽器後回去資料庫查session的id去比對

弊端:

  從資料庫中的session的讀取會導致網站效能慢,影響資料庫水平擴容等,從而產生了Token

 

Token 

   Token包含資料資訊(data)和驗證資訊(HMAC)的整體資料結構,放在http協議裡返回給客戶端

   資料資訊改變,驗證資訊也會跟著改變,儲存在客戶端,不需要對資料庫的訪問