Cookie
Cookie是網(wǎng)頁瀏覽器用來保存用戶信息的文件。
HTTP協(xié)議是無狀態(tài)的協(xié)議,網(wǎng)頁關(guān)閉后,瀏覽器和服務(wù)端的連接就會斷開,下次打開網(wǎng)頁需要重新連接,服務(wù)器無法從你打開的連接上恢復(fù)上一次的會話。
有了cookie就不同了,當(dāng)打開網(wǎng)頁和服務(wù)器建立連接的時候,把cookie里記錄的信息一起發(fā)送給服務(wù)器,這樣服務(wù)器就能從cookie里的信息識別你的身份,讓給頁面為用戶提供特別屬于用戶的內(nèi)容,比如登錄網(wǎng)頁里默認(rèn)的用戶名和密碼。
我們訪問瀏覽器時,會發(fā)送一個HTTP請求至服務(wù)端,服務(wù)端會發(fā)送一個HTTP響應(yīng)到客戶端,其中包括Sst-Cookie,意思就是瀏覽器建立一個cookie保存服務(wù)器指定的內(nèi)容,比如用戶信息和用戶操作信息;
瀏覽器保存好信息后,下次我們再訪問服務(wù)器的時候,瀏覽器會再把之前保存的cookie攜帶到服務(wù)器端;
服務(wù)器端會從收到的cookie中識別用戶身份,就能讓頁面為你提供專門屬于用戶的內(nèi)容了。
cookie存儲的數(shù)量和字符數(shù)量都有限制,只能存儲十幾個,不超過4kb
cookie存儲在用戶瀏覽器里也不安全,任何人都能直接查看。
比如google瀏覽器,右鍵-檢查-Console-輸入document.cookie即可查看

Cookie的生命周期
整個會話期間:瀏覽器會將cookie保存在內(nèi)存中,瀏覽器關(guān)閉時自動刪除這個cookie;
長久有效:手動將cookie保存在客戶端的硬盤中,瀏覽器關(guān)閉,cookie不會被清除,下次再打開瀏覽器訪問相應(yīng)網(wǎng)站時,這個cookie就會自動再次發(fā)送到服務(wù)器。
Session
Session會話,會話是指我們訪問網(wǎng)站的一個周期,在瀏覽器打開一個站點,然后在這個站點點擊多個超鏈接查看各個網(wǎng)頁,然后關(guān)閉瀏覽器,整個過程稱為一個會話。
客戶端瀏覽器訪問網(wǎng)站時,服務(wù)器會向瀏覽器發(fā)送一個每個用戶特有的會話編號session ID,讓他進(jìn)入到cookie里。服務(wù)器同時也把session和對應(yīng)的用戶信息及操作記錄在服務(wù)器上,這些記錄就是session。
客戶端瀏覽器再次訪問時,會發(fā)送cookie給服務(wù)器,其中就包括sessionID,服務(wù)器從cookie里找到sessionID,再根據(jù)sessionID找到以前記錄的用戶信息就可以知道他之前操控哪些、訪問過哪里。
session安全性高,但是對服務(wù)器的存儲壓力很大。
Token
Token是服務(wù)端生成額的一串字符串,當(dāng)作客戶端進(jìn)行請求的一個令牌,當(dāng)?shù)谝淮蔚卿浐?,服?wù)器生成一個Token并將Token返回給客戶端,以后客戶端只需帶上這個Token請求數(shù)據(jù)即可,無需再次帶上用戶名和密碼。
Token的認(rèn)證流程與Cookie相似:
1.用戶登錄,成功后服務(wù)端返回Token給客戶端
2.客戶端收到數(shù)據(jù)后保存在客戶端
3.客戶端再次訪問服務(wù)器,將Token放入header中
4.服務(wù)器對token進(jìn)行校驗,成功則返回數(shù)據(jù),失敗則返回錯誤碼
Token和Session對比選型
傳統(tǒng)的應(yīng)用是將session放到應(yīng)用服務(wù)器上,而將產(chǎn)生的JSESSIONID放到用戶瀏覽器的cookie中,而這種模式在前后端分離中會存在以下問題:
1.開發(fā)繁瑣
2.安全性和體驗差
3.有些前端技術(shù)不支持cookie,如微信小程序
Token的優(yōu)點:
1.支持跨域訪問:cookie不允許跨域訪問,token支持,前提是傳輸?shù)挠脩粽J(rèn)證信息通過HTTP頭傳輸。
2.無狀態(tài):Token機制不需要在服務(wù)端存儲session信息,因為Token自身包含了用戶的信息,只需要在客戶端的cookie或本地介質(zhì)存儲狀態(tài)信息。
3.去耦:不需要綁定到一個特定的身份驗證方案,Token可以在任何地方生成。
4.適用接口跨平臺:當(dāng)客戶端是原生平臺時,cookie是不被支持的,采用Token認(rèn)證機制就會簡單的多。
5.CSRF(跨站請求偽造):不再依賴Cookie,就不需要考慮CSRF的防范
Token的驗證機制比Session的驗證機制更加靈活方便,一般使用Token較多。