Cookie,Session,Token的理解

Cookie

cookie由服務(wù)器生成,發(fā)送給瀏覽器,瀏覽器把cookie以kv形式保存到某個(gè)目錄下的文本文件內(nèi),下一次請(qǐng)求同一網(wǎng)站時(shí)會(huì)把該cookie發(fā)送給服務(wù)器。由于cookie是存在客戶端上的,所以瀏覽器加入了一些限制確保cookie不會(huì)被惡意使用,同時(shí)不會(huì)占據(jù)太多磁盤空間,所以每個(gè)域的cookie數(shù)量是有限的。

Seesion

session是服務(wù)器就要給每個(gè)客戶端分配不同的“身份標(biāo)識(shí)”,然后客戶端每次向服務(wù)器發(fā)請(qǐng)求的時(shí)候,都帶上這個(gè)“身份標(biāo)識(shí)”,服務(wù)器就知道這個(gè)請(qǐng)求來(lái)自于誰(shuí)了。服務(wù)器使用session把用戶的信息臨時(shí)保存在了服務(wù)器上,用戶離開(kāi)網(wǎng)站后session會(huì)被銷毀。這種用戶信息存儲(chǔ)方式相對(duì)cookie來(lái)說(shuō)更安全,可是session有一個(gè)缺陷:如果web服務(wù)器做了負(fù)載均衡,那么下一個(gè)操作請(qǐng)求到了另一臺(tái)服務(wù)器的時(shí)候session會(huì)丟失。

Token

Token是服務(wù)端生成的一串字符串,以作客戶端進(jìn)行請(qǐng)求的一個(gè)令牌,當(dāng)?shù)谝淮蔚卿浐螅?wù)器生成一個(gè)Token便將此Token返回給客戶端,以后客戶端只需帶上這個(gè)Token前來(lái)請(qǐng)求數(shù)據(jù)即可,無(wú)需再次帶上用戶名和密碼。最簡(jiǎn)單的token組成:uid(用戶唯一的身份標(biāo)識(shí))、time(當(dāng)前時(shí)間的時(shí)間戳)、sign(簽名,由token的前幾位+鹽以哈希算法壓縮成一定長(zhǎng)的十六進(jìn)制字符串,可以防止惡意第三方拼接token請(qǐng)求服務(wù)器)。

使用Token的目的:Token的目的是為了減輕服務(wù)器的壓力,減少頻繁的查詢數(shù)據(jù)庫(kù),使服務(wù)器更加健壯。

基于Token的身份驗(yàn)證

1 客戶端使用用戶名跟密碼請(qǐng)求登錄

2 服務(wù)端收到請(qǐng)求,去驗(yàn)證用戶名與密碼

3 驗(yàn)證成功后,服務(wù)端會(huì)簽發(fā)一個(gè) Token,再把這個(gè) Token 發(fā)送給客戶端
客戶端收到 Token 以后可以把它存儲(chǔ)起來(lái),比如放在 Cookie 里或者 Local Storage 里

4 客戶端每次向服務(wù)端請(qǐng)求資源的時(shí)候需要帶著服務(wù)端簽發(fā)的 Token

5 服務(wù)端收到請(qǐng)求,然后去驗(yàn)證客戶端請(qǐng)求里面帶著的 Token,如果驗(yàn)證成功,就向客戶端返回請(qǐng)求的數(shù)據(jù)

補(bǔ)充:

cookie與session的區(qū)別

1、cookie數(shù)據(jù)存放在客戶端上,session數(shù)據(jù)放在服務(wù)器上。

2、cookie不是很安全,別人可以分析存放在本地的COOKIE并進(jìn)行COOKIE欺騙
考慮到安全應(yīng)當(dāng)使用session。

3、session會(huì)在一定時(shí)間內(nèi)保存在服務(wù)器上。當(dāng)訪問(wèn)增多,會(huì)比較占用你服務(wù)器的性能
考慮到減輕服務(wù)器性能方面,應(yīng)當(dāng)使用COOKIE。

4、單個(gè)cookie保存的數(shù)據(jù)不能超過(guò)4K,很多瀏覽器都限制一個(gè)站點(diǎn)最多保存20個(gè)cookie。

session與token的區(qū)別

session 和 oauth token并不矛盾,作為身份認(rèn)證 token安全性比session好,因?yàn)槊總€(gè)請(qǐng)求都有簽名還能防止監(jiān)聽(tīng)以及重放攻擊,而session就必須靠鏈路層來(lái)保障通訊安全了。如上所說(shuō),如果你需要實(shí)現(xiàn)有狀態(tài)的會(huì)話,仍然可以增加session來(lái)在服務(wù)器端保存一些狀態(tài)

App通常用restful api跟server打交道。Rest是stateless的,也就是app不需要像browser那樣用cookie來(lái)保存session,因此用session token來(lái)標(biāo)示自己就夠了,session/state由api server的邏輯處理。 如果你的后端不是stateless的rest api, 那么你可能需要在app里保存session.可以在app里嵌入webkit,用一個(gè)隱藏的browser來(lái)管理cookie session.

Session 是一種HTTP存儲(chǔ)機(jī)制,目的是為無(wú)狀態(tài)的HTTP提供的持久機(jī)制。所謂Session 認(rèn)證只是簡(jiǎn)單的把User 信息存儲(chǔ)到Session 里,因?yàn)镾ID 的不可預(yù)測(cè)性,暫且認(rèn)為是安全的。這是一種認(rèn)證手段。 而Token ,如果指的是OAuth Token 或類似的機(jī)制的話,提供的是 認(rèn)證 和 授權(quán) ,認(rèn)證是針對(duì)用戶,授權(quán)是針對(duì)App 。其目的是讓 某App有權(quán)利訪問(wèn) 某用戶 的信息。這里的 Token是唯一的。不可以轉(zhuǎn)移到其它 App上,也不可以轉(zhuǎn)到其它 用戶 上。 轉(zhuǎn)過(guò)來(lái)說(shuō)Session 。Session只提供一種簡(jiǎn)單的認(rèn)證,即有此 SID,即認(rèn)為有此 User的全部權(quán)利。是需要嚴(yán)格保密的,這個(gè)數(shù)據(jù)應(yīng)該只保存在站方,不應(yīng)該共享給其它網(wǎng)站或者第三方App。 所以簡(jiǎn)單來(lái)說(shuō),如果你的用戶數(shù)據(jù)可能需要和第三方共享,或者允許第三方調(diào)用 API 接口,用 Token 。如果永遠(yuǎn)只是自己的網(wǎng)站,自己的 App,用什么就無(wú)所謂了。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 目錄Cookie機(jī)制什么是CookieCookie的不可跨域名性Unicode編碼:保存中文BASE64編碼:保存...
    Tomatoro閱讀 16,978評(píng)論 7 186
  • 1. 緩存分類 服務(wù)器端緩存(CDN緩存); 客戶端緩存(瀏覽器緩存); 2. 瀏覽器緩存 2.1. 強(qiáng)緩存 瀏覽...
    puxiaotaoc閱讀 5,659評(píng)論 3 208
  • 會(huì)話(Session)跟蹤是Web程序中常用的技術(shù),用來(lái)跟蹤用戶的整個(gè)會(huì)話。常用的會(huì)話跟蹤技術(shù)是Cookie與Se...
    chinariver閱讀 5,665評(píng)論 1 49
  • 我對(duì)面的女生,張小北,典型的黃色性格,目標(biāo)極強(qiáng),工作起來(lái)也非常有效率。但是我今天要說(shuō)的不是她的這個(gè)品質(zhì),我想說(shuō)一說(shuō)...
    HoneyReiki閱讀 438評(píng)論 0 1
  • 上一章節(jié):藍(lán)月亮21 ----------正文--------------- 第三章畢業(yè)季 2參加社會(huì)活動(dòng) (10...
    雪漫飛閱讀 580評(píng)論 17 11