1. 程式人生 > >快速瞭解會話管理三劍客cookie、session和JWT

快速瞭解會話管理三劍客cookie、session和JWT

更多內容,歡迎關注微信公眾號:全菜工程師小輝。公眾號回覆關鍵詞,領取免費學習資料。

儲存位置

三者都是應用在web中對http無狀態協議的補充,達到狀態保持的目的

cookie:cookie中的資訊是以鍵值對的形式儲存在瀏覽器中,而且在瀏覽器中可以直接看到資料。下圖為safari的cookie截圖:

cookie

session:session儲存在伺服器中,然後傳送一個cookie儲存在瀏覽器中,cookie中儲存的是session_id,之後每次請求伺服器通過session_id可以獲取對應的session資訊

JWT:JWT儲存在瀏覽器的storage或者cookie中。由伺服器產生加密的json資料包括:header,payload和signature三部分組成。header中通常來說由token的生成演算法和型別組成;payload中則用來儲存相關的狀態資訊;signature部分由header,payload,secret_key三部分加密生成。 注意,不要在JWT的payload或header中放置敏感資訊,除非它們是加密的。下圖為官網的截圖:

JWT

優缺點

cookie:

  • 優點:
  1. 結構簡單。cookie是一種基於文字的輕量結構,包含簡單的鍵值對。
  2. 資料持久。雖然客戶端計算機上cookie的持續時間取決於客戶端上的cookie過期處理和使用者干預,cookie通常是客戶端上持續時間最長的資料保留形式。
  • 缺點:
  1. 大小受到限制。大多數瀏覽器對 cookie 的大小有 4096 位元組的限制,儘管在當今新的瀏覽器和客戶端裝置版本中,支援 8192 位元組的 cookie 大小已愈發常見。
  2. 非常不安全。cookie將資料裸露在瀏覽器中,這樣大大增大了資料被盜取的風險,所有我們不應該將中要的資料放在cookie中,或者將資料加密處理。
  3. 容易被csrf攻擊。可以設定csrf_token來避免攻擊。

session:

  • 優點:
  1. session的資訊儲存在服務端,相比於cookie就在一定程度上加大了資料的安全性;相比於jwt方便進行管理,也就是說當用戶登入和主動登出,只需要新增刪除對應的session就可以,這樣管理起來很方便。
  • 缺點:
  1. session儲存在服務端,這就增大了伺服器的開銷,當用戶多的情況下,伺服器效能會大大降低。
  2. 因為是基於cookie來進行使用者識別的, cookie如果被截獲,使用者就會很容易受到跨站請求偽造的攻擊。
  3. 使用者認證之後,服務端做認證記錄,如果認證的記錄被儲存在記憶體中的話,這意味著使用者下次請求還必須要請求在這臺伺服器上,這樣才能拿到授權的資源,這樣在分散式的應用上,會限制負載均衡和叢集水平拓展的能力。

JWT:

  • 優點:
  1. 因為json的通用性,jwt可以支援跨語言請求,像JAVA,JavaScript,PHP等很多語言都可以使用。
  2. 因為有了payload部分,所以JWT可以在自身儲存一些其他業務邏輯所必要的非敏感資訊。
  3. 便於傳輸,JWT的構成非常簡單,位元組佔用很小,所以它是非常便於傳輸的。
  4. 不需要在服務端儲存會話資訊, 利於伺服器橫向拓展。
  • 缺點:
  1. 登入狀態資訊續簽問題。比如設定token的有效期為一個小時,那麼一個小時後,如果使用者仍然在這個web應用上,這個時候當然不能指望使用者再登入一次。目前可用的解決辦法是在每次使用者發出請求都返回一個新的token,前端再用這個新的token來替代舊的,這樣每一次請求都會重新整理token的有效期。但是這樣,需要頻繁的生成token。另外一種方案是判斷還有多久這個token會過期,在token快要過期時,返回一個新的token。
  2. 使用者主動登出。JWT並不支援使用者主動退出登入,客戶端在別處使用token仍然可以正常訪問。為了支援登出,我的解決方案是在登出時將該token加入到伺服器的redis黑名單中。

JWT與OAuth的區別

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

OAuth2是一種授權框架,用在使用第三方賬號登入的情況(比如使用weibo, qq, github登入某個app)
JWT是一種認證協議,用在前後端分離,需要簡單的對後臺API進行保護時使用。 > 無論使用哪種方式切記用HTTPS來保證資料的安全性;

更多內容,歡迎關注微信公眾號:全菜工程師小輝。公眾號回覆關鍵詞,領取免費學習資料。

哎呀,如果我的名片丟了。微信搜尋“全菜工程師小輝”,依   
 
 </div> 
 <div class=

相關推薦

快速瞭解會話管理三劍客cookiesessionJWT

更多內容,歡迎關注微信公眾號:全菜工程師小輝。公眾號回覆關鍵詞,領取免費學習資料。 儲存位置 三者都是應用在web中對http無狀

jsp,el表示式,會話管理cookiesession技術,session的建立銷燬/清空購物車

第一部分:jsp入門和el表示式入門 1、jsp的入門 1.1 什麼是jsp: (1)sun公司用於動態網站開發技術 servlet ,因為使用servlet如果向頁面輸出內容很麻煩, 有了jsp,使用jsp向頁面輸出內容很方便,jsp就是servl

Servlet--淺析會話管理CookieURL重寫HttpSession原理

平常我們在瀏覽網頁的時候,會有一些網站要求我們進行登入,當我們成功登入之後,會發現我們所瀏覽的所有相關網頁都不再需要我們重新登入,這是為什麼呢。還有當我們在電商平臺進行購物的時候,我們雖然是在同一家電商平臺進行購物,但是我們明明是在不同的頁面進行的新增購物車的選

django之cookiesessionajax

length clean 投票 console 默認值 設置 什麽 save pre 1 Cookie cookie是什麽? 保存在客戶端瀏覽器上的鍵值對 {k:v} cookie依附在請求頭或響應頭中出現 發

CookiesessionlocalStorage以及sessionStorage之間的區別

方法 上網 getc 保存 調用 不必要 單個 ora 獨立 一、Cookie、session和localStorage的區別 cookie的內容主要包括:名字、值、過期時間、路徑和域。路徑與域一起構成cookie的作用範圍。若不設置時間,則表示這個cookie的生命期

cookiesessiontoken

aio 一個用戶 核心 選擇 uil img 做的 它的 blank https://zhuanlan.zhihu.com/p/25495290?utm_source=wechat_session&utm_medium=social 一、cookie   眾所周

CookieSessionDjango分頁

{} 最大 開開 patch 裝飾器 由於 登錄驗證 mat cbv cookie Cookie的由來 大家都知道HTTP協議是無狀態的。 無狀態的意思是每次請求都是獨立的,它的執行情況和結果與前面的請求和之後的請求都無直接關系,它不會受前面的請求響應情況直接影響,也

CookieSession自定義分頁

cookie值 image 分享 show base 新的 ive name pen cookie Cookie的由來 大家都知道HTTP協議是無狀態的。 無狀態的意思是每次請求都是獨立的,它的執行情況和結果與前面的請求和之後的請求都無直接關系,它不會受前面的請求響應情況直

Python cookiesession自定義分頁

參數 dom backend 一個 文本 per iter none 不知道 cookie Cookie的由來 大家都知道HTTP協議是無狀態的。 無狀態的意思是每次請求都是獨立的,它的執行情況和結果與前面的請求和之後的請求都無直接關系,它不會受前面的請求響應情況直接影響,

CookieSession分頁

為什麼使用Cookie:因為HTTP請求是沒有狀態的,每一次請求都是獨立的。 什麼是Cookie:Cookie就是儲存在瀏覽器上的鍵值對,服務端控制著響應,在響應裡新增一個鍵值對,讓瀏覽器在本地儲存,下一次請求的時候,自動攜帶這個鍵值對,是在瀏覽器端設定的,瀏覽器端也可以禁用Cookie。 Cookie的

CookieSession自定義分頁 CookieSession自定義分頁

  生如夏花 Cookie、Session和自定義分頁  

Django - - 進階 - - CookieSession自定義分頁

目錄 cookie Django中操作Cookie Session Django中Session相關方法 分頁 1,cookie 1.1 Cookie的由來 HTTP協議是無狀態的。 無狀態的意思是每次請求都是獨立的,它的執行情況和結果與前面的請求和之後的請求都無直

IM開發基礎知識補課(四):正確理解HTTP短連線中的CookieSessionToken

1、前言 眾所周之,IM是個典型的快速資料流交換系統,當今主流IM系統(尤其移動端IM)的資料流交換方式都是Http短連線+TCP或UDP長連線來實現。Http短連線主要用於從伺服器讀取各種持久化資訊:比如使用者資訊、聊天曆史記錄、好友列表等等,長連線則是用於實時的聊天訊息

cookiesessiontoken區別

cookie 和 session 眾所周知,HTTP 是一個無狀態協議,所以客戶端每次發出請求時,下一次請求無法得知上一次請求所包含的狀態資料,如何能把一個使用者的狀態資料關聯起來呢? 比如在淘寶的某個頁面中,你進行了登陸操作。當你跳轉到商品頁時,服務端如何知道你是已經登

CookieSessionLocalStorage

前記 前面我已經寫了一篇關於Cookie的文章,但是那時候我其實理解的並不是很深刻,會有些搞不懂的地方,今天我就再寫一次,部落格也是我的學習筆記 Cookie Cookie是伺服器傳送到使用者瀏覽器並儲存在本地的一小塊資料,它會在瀏覽器下次向同一伺服器再發起請求時被攜帶併發送到伺服器上。通常,它用於告知

關於模擬登陸的小結-抓包cookiesessiontoken

概述 上個星期根據bcloud寫了個Java版本的登陸專案。其實本來時想做個Linux的百度雲登陸軟體,但是做到獲取bdstoken的時候出了問題解決不了。後來我把bcloud專案下了下來用發現也有問題,應該是百度登陸的過程有了一些改動。通過 web抓包找到一些線索,

CookieSessionToken的區別

目錄 Cookie Session認證機制 Token認證機制 Token預防CSRF Session認識和Token認證的區別 前言:HTTP是一種無狀態的協議,為了分辨連結是誰發起的,需要瀏覽器自己去解決這個問題。不然有些情況下即使是開啟同一個網站的不同頁面也

cookiesessiontoken那些事

cookie 和 session 眾所周知,HTTP 是一個無狀態協議,所以客戶端每次發出請求時,下一次請求無法得知上一次請求所包含的狀態資料,如何能把一個使用者的狀態資料關聯起來呢? 比如在淘寶的某個頁面中,你進行了登陸操作。當你跳轉到商品頁時,服務端如何知道你是已經登陸

一篇文章弄懂cookiesessiontoken

概念 cookie cookie儲存在客戶端,HTTP是無狀態的,HTTP每次發出的時候會附上該域名下的cookie,從而可以給HTTP附上狀態,最常見的就是登入態。 session和token session和token算是一類的,他們是兩種不同的伺服器的驗證

CookieSession快取

Cookie 1、獲取Cookie request.COOKIES['key'] request.get_signed_cookie(key, default=RAISE_ERROR, salt='', max_age=None) 引數: