網(wǎng)上有很多講解Cookie,Session以及Token的帖子者祖,但是講解內(nèi)容時深時淺立莉,描述內(nèi)容晦澀難懂,往往看完一遍心里還沒有什么概念七问。在我艱難理解了其中的含義后蜓耻,簡單的通過比喻的方式來描述這三者的區(qū)別。
一械巡、背景因素
以前由于網(wǎng)速刹淌,流量,技術(shù)等諸多方面限制讥耗,人們往往只能查看單一的頁面有勾。隨著時代發(fā)展,網(wǎng)絡(luò)的關(guān)聯(lián)性也變的越來越重要古程,此時需要有效的方式來做到網(wǎng)站間相互關(guān)聯(lián)
Http協(xié)議是網(wǎng)站間交互常用的一種協(xié)議蔼卡,但他有一種特性:無狀態(tài),即每次協(xié)議的內(nèi)容都是毫無關(guān)系的挣磨,那么想要在不同的界面中傳輸信息就成為了難題雇逞。
二、Cookie茁裙,Session塘砸,Token介紹
本次我們通過生活對比來舉個例子:
我們把用戶在多個網(wǎng)頁間瀏覽查看的行為比作駕駛員過收費站
序號 |
學(xué)術(shù)理解 |
生活比喻 |
---|---|---|
1 |
在沒有cookie、session以及token之前呜达,用戶每訪問一個網(wǎng)站谣蠢,都需要重新上傳身份信息,網(wǎng)站之間無法對用戶進(jìn)行關(guān)聯(lián) |
之前駕駛員過收費站查近,由于沒有已經(jīng)繳費得證據(jù)眉踱,每次過一個新的收費站都需要再繳一次費用 |
2 |
此時出現(xiàn)了Cookie,Cookie由用戶的信息組成霜威,在首次訪問網(wǎng)站時由網(wǎng)站服務(wù)器生成并返回給用戶cookie文件谈喳,保留在用戶本地。每次進(jìn)入網(wǎng)站時戈泼,都將網(wǎng)站對應(yīng)的Cookie傳給網(wǎng)站婿禽,在相同域名下實現(xiàn)跨網(wǎng)頁傳輸信息的作用 |
駕駛員將自身信息上報給收費站,收費站給駕駛員發(fā)放一個基于駕駛員信息的通行證大猛,后續(xù)經(jīng)過收費站以及后面的子收費站時扭倾,就可以直接通過通行證放行。 |
3 |
但cookie本身由于存儲于客戶端挽绩,會有被篡改膛壹,偽造身份信息的風(fēng)險 |
由于通行證在駕駛員手中,可能會受到調(diào)包使用者的風(fēng)險 |
4 |
為了避免上述問題唉堪,新出的session采用將信息保存在服務(wù)器模聋,通過用戶提供sessionId,與服務(wù)端的數(shù)據(jù)庫進(jìn)行對比唠亚,如果一致則確認(rèn)為此用戶链方,且服務(wù)器信息不泄露的條件下,就無法偽造身份 |
收費站一看這不行啊灶搜,那不如我來登記車主提供的身份信息祟蚀,每次車主過收費站需要報自己手機號,如果和我留存的車主信息的手機號一致割卖,那才能通行前酿,而且身份信息保留在我這里也不容易被篡改。 |
5 |
然而使用session仍會對服務(wù)端的數(shù)據(jù)庫/內(nèi)存造成一定壓力究珊,且黑客也可能破解服務(wù)器薪者,導(dǎo)致服務(wù)端的session信息泄露 |
雖然信息存在收費站不容易被篡改了,但收費站本身保管信息以及根據(jù)信息核對車主身份會對收費站造成一定業(yè)務(wù)壓力剿涮,并且也存在存儲的信息被潛入收費站的人偷看后偽造的風(fēng)險 |
6 |
為此出現(xiàn)了Token言津,將用戶傳輸?shù)男畔⑼ㄟ^服務(wù)端加密方式加密后返回加密信息給用戶,下次用戶須提交普通信息以及加密后的信息取试,服務(wù)器將用戶提供的加密信息解密后與普通信息做比對悬槽,如果信息一致則允許繼續(xù)使用當(dāng)前身份傳輸信息,否則需要重新登錄 |
為了解決上面的問題瞬浓,收費站采取了另一種核對方式初婆,車主先提供自身信息,收費站拿到信息后把信息放到一個只有收費站才能打開的盒子里,并把盒子交給車主磅叛。每當(dāng)車主過收費站時需要提交身份信息以及盒子屑咳,收費站打開盒子后拿到盒子里的信息與車主信息進(jìn)行比對,如果是相同的說明盒子確實是本收費站發(fā)的弊琴,并且也是同一個車主的信息兆龙,則允許通行 |
當(dāng)然,真正的cookie敲董,session以及token實現(xiàn)起來并沒有所說的那么簡單紫皇,但本文并不是用來講解三者的核心原理的,而是盡可能幫助分不清三者關(guān)系的人梳理其中的含義腋寨,希望通過這篇文章能夠了解到三者的作用及區(qū)別聪铺。