【网络通信与信息安全】之深入分析Token、session和cookie的使用场景和区别
生活随笔
收集整理的這篇文章主要介紹了
【网络通信与信息安全】之深入分析Token、session和cookie的使用场景和区别
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
在 Web 開發(fā)領(lǐng)域,相信大家對于 Cookie 和 Session 都很熟悉,Cookie 和 Session 都是會話保持技術(shù)的解決方案。隨著技術(shù)的發(fā)展,Token 機(jī)制出現(xiàn)在我們面前,不過很多開發(fā)者對于 Token 和 Cookie、Session 的區(qū)別及使用場景分辨不清。
session 和 cookie
一、什么是 session 和 cookie
- 首先要知道HTTP請求是無狀態(tài)的,也就是不知道這一次的請求和上一次請求是否有關(guān)系,比如我們登錄一個(gè)系統(tǒng)的時(shí)候,驗(yàn)證用戶名密碼之后,打開系統(tǒng)各個(gè)頁面的時(shí)候就不需要再進(jìn)行登錄操作了,直到我們主動退出登錄或超時(shí)退出登錄;這里為了避免訪問每個(gè)都登錄一下,就要用到 session、cookie;
- cookie 是在客戶端(瀏覽器)保存用戶信息的一種機(jī)制;而且每種瀏覽器存儲大小會有一些差異,一般不超過4KB;
- session是在服務(wù)端保存,可以用于記錄客戶狀態(tài),比如我們經(jīng)常會用 session 保存客戶的基本信息、權(quán)限信息等;用戶第一次登錄之后,服務(wù)器就會創(chuàng)建一個(gè) session,瀏覽器再次訪問時(shí),只需要從該 session 中查找該客戶的信息就可以了。
二、Cookie 和 Session 的用途
- 要知道我們訪問網(wǎng)站都是通過 HTTP 協(xié)議或 HTTPS 協(xié)議來完成的,HTTP 協(xié)議它本身是無狀態(tài)的協(xié)議(即:服務(wù)器無法分辨哪些請求是來源于同個(gè)客戶)。而業(yè)務(wù)層面會涉及到客戶端與服務(wù)器端的交互(同網(wǎng)站下多個(gè)頁面間能共享數(shù)據(jù)),此時(shí)服務(wù)器端必須要保持會話狀態(tài),這樣才能進(jìn)行用戶身份的鑒別。
- 由于 HTTP 無狀態(tài)的特性,如果要實(shí)話客戶端和服務(wù)器端的會話保持,那就需要其它機(jī)制來實(shí)現(xiàn),于是 Cookie 和 Session 應(yīng)運(yùn)而生。
- 通常情況下,Session 和 Cookie 是搭配在一起使用的。
Token
一、為什么會產(chǎn)生Token?
在這里會有個(gè)問題,服務(wù)器要保存所有用戶的 session 信息,開銷會很大,如果在分布式的架構(gòu)下,就需要考慮 session 共享的問題,需要做額外的設(shè)計(jì)和開發(fā),例如把 session 中的信息保存到 Redis 中進(jìn)行共享;所以因?yàn)檫@個(gè)原因,有人考慮這些信息是否可以讓客戶端保存,可以保存到任何地方,并且保證其安全性,于是就有了Token。
二、什么是Token?
- Token 是服務(wù)端生成的一串字符串,可以看做客戶端進(jìn)行請求的一個(gè)令牌。
- 當(dāng)客戶端第一次訪問服務(wù)端,服務(wù)端會根據(jù)傳過來的唯一標(biāo)識 userId,運(yùn)用一些加密算法,生成一個(gè) Token,客戶端下次請求時(shí),只需要帶上 Token,服務(wù)器收到請求后,會驗(yàn)證這個(gè) Token。
- 有些公司會建設(shè)統(tǒng)一登錄系統(tǒng)(單點(diǎn)登錄),客戶端先去這個(gè)系統(tǒng)獲取 Token,驗(yàn)證通過再拿著這些 Token 去訪問其他系統(tǒng);API Gateway 也可以提供類似的功能,我們公司就是這樣,客戶端接入的時(shí)候,先向網(wǎng)關(guān)獲取 Token,驗(yàn)證通過了才能訪問被授權(quán)的接口,并且一段時(shí)間后要重新或者 Token。
- Token 俗稱為“令牌”,它的構(gòu)成是:
- uid:用戶唯一身份標(biāo)識;
- timestamp:當(dāng)前時(shí)間戳;
- sign:簽名字符串,防止第三方偽造數(shù)據(jù);簽名密鑰是存儲在服務(wù)器端的,其它人無法知道;
- 其它附加參數(shù)。
三、基于Token的認(rèn)證流程
- 客戶端使用用戶名、密碼做身份驗(yàn)證;
- 服務(wù)端收到請求后進(jìn)行身份驗(yàn)證(也可能是統(tǒng)一登錄平臺、網(wǎng)關(guān));
- 驗(yàn)證成功后,服務(wù)端會簽發(fā)一個(gè) Token 返回給客戶端;
- 客戶端收到 Token 以后可以把它存儲起來(可以放在);每次向服務(wù)端發(fā)送請求的時(shí)候,都要帶著 Token;
- Token 會有過期時(shí)間,過期后需要重新進(jìn)行驗(yàn)證;
- 服務(wù)端收到請求,會驗(yàn)證客戶端請求里面的 Token,驗(yàn)證成功,才會響應(yīng)客戶端的請求;
總結(jié)
- cookie:
- 保存在瀏覽器中,有大小限制,有狀態(tài);
- 由于存放在客戶端,所以是不安全的,人為可以清除;
- cookie 有過期時(shí)間設(shè)定,如果不設(shè)置過期時(shí)間,說明這個(gè) cookie 就是當(dāng)前瀏覽器的會話時(shí)間,瀏覽器關(guān)了,cookie 就存在了。如果有過期時(shí)間,cookie 就會存儲到硬盤上,瀏覽器關(guān)閉不影響 cookie。下次打開瀏覽器,cookie 還存在;
- cookie 有大小的限制,4KB。
- session:保存在服務(wù)器中,服務(wù)器有資源開銷,分布式、跨系統(tǒng)不好實(shí)現(xiàn);
- Token:客戶端可以將 Token 保存到任何地方,無限制,無狀態(tài),利于分布式部署。
總結(jié)
以上是生活随笔為你收集整理的【网络通信与信息安全】之深入分析Token、session和cookie的使用场景和区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【网络通信与信息安全】之深入分析一个TC
- 下一篇: 【数据结构与算法】之组成和的完全平方数最