背景:
最近在總結一些容易理解混淆的概念,之前面試的時候提到過,我覺得也說不清楚,這兩天項目做接口測試發現用的cookie而不是之前的token,於是總結一下,便於以后用到的時候再閱讀以及分享給需要的人。后期如果發現總結不對會持續更新
從安全性優先級來說:
1、優先級
Cookie<session<token
2、 安全性
Cookie:
①cookie不是很安全,別人可以分析存放在本地的cookie並進行cookie欺騙,考慮到安全應當使用session
②HTTP是一種無狀態協議,服務器沒有辦法單單從網絡連接上面知道訪問者的身份,為了解決這個問題,就誕生了Cookie
Cookie實際上是一小段的文本信息。客戶端請求服務器,如果服務器需要記錄該用戶狀態,就使用response向客戶端瀏覽器頒發一個Cookie
客戶端瀏覽器會把Cookie保存起來。當瀏覽器再請求該網站時,瀏覽器把請求的網址連同該Cookie一同提交給服務器。服務器檢查該Cookie,以此來辨認用戶狀態。服務器還可以根據需要修改Cookie的內容。
session:
① session會在一定時間內保存在服務器上。當訪問增多,會比較占用你服務器的性能,考慮到減輕服務器性能方面,應當使用cookie
② 關閉瀏覽器不會關閉session,它具失效日期,失效后服務器認為客戶端停止了活動,並刪除session以節省空間
Token:
① 作為身份認證 token安全性比session好,因為每個請求都有簽名還能防止監聽以及重放攻擊
② Oauth token提供的是認證和授權,認證針對用戶,授權針對app
③ token的生成一般是采用uuid保證唯一性,當用戶登錄時為其生成唯一的token,存儲一般保存在數據庫中。token過期時間采用把token二次保存在cookie或session里面,根據cookie和session的過期時間去維護token的過期時間
開發過程舉例:
案例一:
項目中我們的用戶數據可能需要和第三方共享,或允許第三方調用我們的API則用token
案例二:
公司內部的網站,自己的App,就可以用cookie、session
一般來說我們可以將登錄信息放在session,其他信息保存在cookie
案例三:
觀察微信、支付寶登錄接口用的就是token