徹底弄懂session,cookie,token

2021-09-22 02:43:35 字數 1443 閱讀 9102

我在寫之前看了很多篇session,cookie的文章,有的人說先有了cookie,後有了session。也有人說先有session,後有cookie。感覺都沒有講的很清楚,泛泛而談。希望本篇文章對大家有所幫助

注:本文需要讀者有cookie,session,token的相關基礎知識。

什麼是無狀態呢?就是說這一次請求和上一次請求是沒有任何關係的,互不認識的,沒有關聯的。這種無狀態的的好處是快速。壞處是假如我們想要把www.zhihu.com/login.htmlwww.zhihu.com/index.html關聯起來,必須使用某些手段和工具

由於http的無狀態性,為了使某個網域名稱下的所有網頁能夠共享某些資料,session和cookie出現了。客戶端訪問伺服器的流程如下

簡而言之, session 有如使用者資訊檔案表, 裡面包含了使用者的認證資訊和登入狀態等資訊. 而 cookie 就是使用者通行證

token 也稱作令牌,由uid+time+sign[+固定引數]

token 的認證方式類似於臨時的證書簽名, 並且是一種服務端無狀態的認證方式, 非常適合於 rest api 的場景. 所謂無狀態就是服務端並不會儲存身份認證相關的資料。

token在客戶端一般存放於localstorage,cookie,或sessionstorage中。在伺服器一般存於資料庫中

token 的認證流程與cookie很相似

假如使用者正在登陸銀行網頁,同時登陸了攻擊者的網頁,並且銀行網頁未對csrf攻擊進行防護。攻擊者就可以在網頁放乙個表單,該表單提交src為,body為count=1000&to=tom。倘若是session+cookie,使用者開啟網頁的時候就已經轉給tom1000元了.因為form 發起的 post 請求並不受到瀏覽器同源策略的限制,因此可以任意地使用其他域的 cookie 向其他域傳送 post 請求,形成 csrf 攻擊。在post請求的瞬間,cookie會被瀏覽器自動新增到請求頭中。但token不同,token是開發者為了防範csrf而特別設計的令牌,瀏覽器不會自動新增到headers裡,攻擊者也無法訪問使用者的token,所以提交的表單無法通過伺服器過濾,也就無法形成攻擊。

我們已經知道session時有狀態的,一般存於伺服器記憶體或硬碟中,當伺服器採用分布式或集群時,session就會面對負載均衡問題。

而token是無狀態的,token字串裡就儲存了所有的使用者資訊

cookie、session、token那點事兒

cookie,token驗證的區別

有了cookie為什麼需要session

csrf token的設計是否有其必要性

cookie,token,session三者的問題和解決方案

負載均衡集群中的session解決方案

jwt介紹

json web token 入門教程

徹底弄懂 Unicode 編碼

原文 今天,在學習 node.js 中的 buffer 物件時,注意到它的 alloc 和 from 方法會預設用utf 8編碼,在陣列中每位對應 1 位元組的十六進製制數。想到了之間學習 es6 時關於字串的 unicode 表示法,突然就很想知道 utf 16 是如何進行編碼的,我嘗試將一些漢字...

徹底弄懂Redis set篇

redis中有兩種集合,一種是無序集合,一種是有序集合,他們之間的相同點就是不重複,不同點就是是否有序,我們分別介紹一下。因為set只要保證加入的元素不重複就好,所以他的底層實現也比較簡單,就是乙個value為空的雜湊表,key就是用來儲存加入的元素值的,我們今天重點介紹的就是sort set 有序...

徹底弄懂React Redux元件通訊

為了方便使用,redux的作者封裝了乙個react專用的庫react redux,講解之前,先來了解一下什麼是容器元件和傻瓜元件?react redux把元件分為容器元件和傻瓜元件 ui元件 容器元件,負責和redux store打交道的元件,處於外層。功能 和redux store打交道,讀取st...