溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

怎么理解會(huì)話管理中的cookie、session和JWT

發(fā)布時(shí)間:2021-12-17 16:16:53 來源:億速云 閱讀:166 作者:柒染 欄目:大數(shù)據(jù)

本篇文章為大家展示了怎么理解會(huì)話管理中的cookie、session和JWT,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

存儲(chǔ)位置

三者都是應(yīng)用在web中對(duì)http無狀態(tài)協(xié)議的補(bǔ)充,達(dá)到狀態(tài)保持的目的

cookie:cookie中的信息是以鍵值對(duì)的形式儲(chǔ)存在瀏覽器中,而且在瀏覽器中可以直接看到數(shù)據(jù)。下圖為safari的cookie截圖:

怎么理解會(huì)話管理中的cookie、session和JWT

session:session存儲(chǔ)在服務(wù)器中,然后發(fā)送一個(gè)cookie存儲(chǔ)在瀏覽器中,cookie中存儲(chǔ)的是session_id,之后每次請(qǐng)求服務(wù)器通過session_id可以獲取對(duì)應(yīng)的session信息

JWT:JWT存儲(chǔ)在瀏覽器的storage或者cookie中。由服務(wù)器產(chǎn)生加密的json數(shù)據(jù)包括:header,payload和signature三部分組成。header中通常來說由token的生成算法和類型組成;payload中則用來保存相關(guān)的狀態(tài)信息;signature部分由header,payload,secret_key三部分加密生成。 注意,不要在JWT的payload或header中放置敏感信息,除非它們是加密的。下圖為官網(wǎng)的截圖:

怎么理解會(huì)話管理中的cookie、session和JWT

優(yōu)缺點(diǎn)

cookie:

  • 優(yōu)點(diǎn):

  1. 結(jié)構(gòu)簡(jiǎn)單。cookie是一種基于文本的輕量結(jié)構(gòu),包含簡(jiǎn)單的鍵值對(duì)。

  2. 數(shù)據(jù)持久。雖然客戶端計(jì)算機(jī)上cookie的持續(xù)時(shí)間取決于客戶端上的cookie過期處理和用戶干預(yù),cookie通常是客戶端上持續(xù)時(shí)間最長(zhǎng)的數(shù)據(jù)保留形式。

  • 缺點(diǎn):

  1. 大小受到限制。大多數(shù)瀏覽器對(duì) cookie 的大小有 4096 字節(jié)的限制,盡管在當(dāng)今新的瀏覽器和客戶端設(shè)備版本中,支持 8192 字節(jié)的 cookie 大小已愈發(fā)常見。

  2. 非常不安全。cookie將數(shù)據(jù)裸露在瀏覽器中,這樣大大增大了數(shù)據(jù)被盜取的風(fēng)險(xiǎn),所有我們不應(yīng)該將中要的數(shù)據(jù)放在cookie中,或者將數(shù)據(jù)加密處理。

  3. 容易被csrf攻擊??梢栽O(shè)置csrf_token來避免攻擊。

session

  • 優(yōu)點(diǎn):

  1. session的信息存儲(chǔ)在服務(wù)端,相比于cookie就在一定程度上加大了數(shù)據(jù)的安全性;相比于jwt方便進(jìn)行管理,也就是說當(dāng)用戶登錄和主動(dòng)注銷,只需要添加刪除對(duì)應(yīng)的session就可以,這樣管理起來很方便。

  • 缺點(diǎn):

  1. session存儲(chǔ)在服務(wù)端,這就增大了服務(wù)器的開銷,當(dāng)用戶多的情況下,服務(wù)器性能會(huì)大大降低。

  2. 因?yàn)槭腔赾ookie來進(jìn)行用戶識(shí)別的, cookie如果被截獲,用戶就會(huì)很容易受到跨站請(qǐng)求偽造的攻擊。

  3. 用戶認(rèn)證之后,服務(wù)端做認(rèn)證記錄,如果認(rèn)證的記錄被保存在內(nèi)存中的話,這意味著用戶下次請(qǐng)求還必須要請(qǐng)求在這臺(tái)服務(wù)器上,這樣才能拿到授權(quán)的資源,這樣在分布式的應(yīng)用上,會(huì)限制負(fù)載均衡和集群水平拓展的能力。

JWT

  • 優(yōu)點(diǎn):

  1. 因?yàn)閖son的通用性,jwt可以支持跨語言請(qǐng)求,像JAVA,JavaScript,PHP等很多語言都可以使用。

  2. 因?yàn)橛辛藀ayload部分,所以JWT可以在自身存儲(chǔ)一些其他業(yè)務(wù)邏輯所必要的非敏感信息。

  3. 便于傳輸,JWT的構(gòu)成非常簡(jiǎn)單,字節(jié)占用很小,所以它是非常便于傳輸?shù)摹?/p>

  4. 不需要在服務(wù)端保存會(huì)話信息, 利于服務(wù)器橫向拓展。

  • 缺點(diǎn):

  1. 登錄狀態(tài)信息續(xù)簽問題。比如設(shè)置token的有效期為一個(gè)小時(shí),那么一個(gè)小時(shí)后,如果用戶仍然在這個(gè)web應(yīng)用上,這個(gè)時(shí)候當(dāng)然不能指望用戶再登錄一次。目前可用的解決辦法是在每次用戶發(fā)出請(qǐng)求都返回一個(gè)新的token,前端再用這個(gè)新的token來替代舊的,這樣每一次請(qǐng)求都會(huì)刷新token的有效期。但是這樣,需要頻繁的生成token。另外一種方案是判斷還有多久這個(gè)token會(huì)過期,在token快要過期時(shí),返回一個(gè)新的token。

  2. 用戶主動(dòng)注銷。JWT并不支持用戶主動(dòng)退出登錄,客戶端在別處使用token仍然可以正常訪問。為了支持注銷,我的解決方案是在注銷時(shí)將該token加入到服務(wù)器的redis黑名單中。

JWT與OAuth的區(qū)別

這兩個(gè)概念總有人用混淆,所以一起介紹了。

OAuth3是一種授權(quán)框架,用在使用第三方賬號(hào)登錄的情況(比如使用weibo, qq, github登錄某個(gè)app)
JWT是一種認(rèn)證協(xié)議,用在前后端分離,需要簡(jiǎn)單的對(duì)后臺(tái)API進(jìn)行保護(hù)時(shí)使用。無論使用哪種方式切記用HTTPS來保證數(shù)據(jù)的安全性;

上述內(nèi)容就是怎么理解會(huì)話管理中的cookie、session和JWT,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI