cookie、Session、Token、sessionStorage、localStorage简介__Token放在 cookie, sessionStorage 和 localStorage中区别
cookie、Session、Token、sessionStorage、localStorage簡介
cookie
是一個非常具體的東西,只得是瀏覽器里永久存儲的一種數據,是瀏覽器實現的一種數據存儲功能。Cookie在計算機中是個存儲在瀏覽器目錄中的文本文件,當瀏覽器運行時,存儲在RAM中發揮作用(此種 Cookies 稱作 Session Cookies),一旦用戶從該網站或服務器退出,Cookie可存儲在用戶本地的硬盤上(此種Cookies稱作Persistent Cookies)。Cookie使用限制:Cookie 必須在 HTML 文件的內容輸出之前設置;不同的瀏覽器(Netscape Navigator、Internet Explorer)對Cookie的處理不一致,使用時一定要考慮;客戶端用戶如果設置禁止 Cookie,則 Cookie 不能建立。目前,在客戶端,一個瀏覽器能創建的Cookie數量最多為300個,并且每個不能超過4KB,每個Web站點能設置的Cookie總數不能超過20個。
cookie執行流程:
A:首先,客戶端會發送一個http請求到服務器端。
B:服務器端接受客戶端請求后,發送一個http響應到客戶端,這個響應頭,其中就包含Set-Cookie頭部。
C:在客戶端發起的第二次請求(注意:如果服務器需要我們帶上Cookie,我們就需要在B步驟上面拿到這個Cookie然后作為請求頭一起發起第二次請求),提供給了服務器端可以用來唯一標識客戶端身份的信息。這時,服務器端也就可以判斷客戶端是否啟用了cookies。盡管,用戶可能在和應用程序交互的過程中突然禁用cookies的使用,但是,這個情況基本是不太可能發生的,所以可以不加以考慮,這在實踐中也被證明是對的。
Session
從字面上講,就是會話。計算機里服務器為了區分各個瀏覽器客戶端是哪一個發送的請求,為每個web客戶端加的身份標識就是session,用于區別不同web客戶端的的請求。至于客戶端如何保存身份標識,對于web客戶端,采用cookie的方式保存。服務器的session需要至少從客戶端傳來一個session_id,此session_id通常存與cookie中,或是url中。Session在一次會話中解決2次HTTP的請求的關聯,讓它們產生聯系,讓2兩個頁面都能讀取到找個這個全局的session信息。session信息存在于服務器端,所以也就很好的解決了安全問題。
Token
token是用戶身份的驗證方式,我們通常叫它:令牌。最簡單的token組成:uid(用戶唯一的身份標識)、time(當前時間的時間戳)、sign(簽名,由token的前幾位+鹽以哈希算法壓縮成一定長的十六進制字符串,可以防止惡意第三方拼接token請求服務器)。還可以把不變的參數也放進token,避免多次查庫。
應用場景:
A:當用戶首次登錄成功(注冊也是一種可以適用的場景)之后, 服務器端就會生成一個token值,這個值,會在服務器保存token值(保存在數據庫中),再將這個token值返回給客戶端。
B:客戶端拿到token值之后,進行本地保存(SP存儲是大家能夠比較支持和易于理解操作的存儲)。
C:當客戶端再次發送網絡請求(一般不是登錄請求)的時候,就會將這個token值附帶到參數中發送給服務器。
D:服務器接收到客戶端的請求之后,會取出token值與保存在本地(數據庫)中的token值做對比:
對比一:如果兩個 token 值相同, 說明用戶登錄成功過!當前用戶處于登錄狀態!
對比二:如果沒有這個 token 值, 則說明沒有登錄成功。
對比三:如果 token 值不同: 說明原來的登錄信息已經失效,讓用戶重新登錄。
cookie和session區別
1、cookie數據存放在客戶的瀏覽器上,session數據放在服務器上。
2、cookie不是很安全,別人可以分析存放在本地的cookie并進行cookie欺騙,考慮到安全
應當使用session。
3、session會在一定時間內保存在服務器上。當訪問增多,會比較占用你服務器的性能,考慮
到減輕服務器性能方面,應當使用cookie。
、單個cookie保存的數據不能超過4K,很多瀏覽器都限制一個站點最多保存20個cookie。
5、個人建議:
將登陸信息等重要信息存放為session。
其他信息如果需要保留,可以放在cookie中。
Token和Session 的區別
session和 token并不矛盾,作為身份認證token安全性比session好,因為每個請求都有簽名還能防止監聽以及重放攻擊,而session就必須靠鏈路層來保障通訊安全了。如上所說,如果你需要實現有狀態的會話,仍然可以增加session來在服務器端保存一些狀態。App通常用restful api跟server打交道。Rest是stateless的,也就是app不需要像browser那樣用cookie來保存session,因此用session token來標示自己就夠了,session/state由api server的邏輯處理。如果你的后端不是stateless的rest api,那么你可能需要在app里保存session.可以在app里嵌入webkit,用一個隱藏的browser來管理cookie session.Session是一種HTTP存儲機制,目的是為無狀態的HTTP提供的持久機制。所謂Session認證只是簡單的把User信息存儲到Session里,因為SID的不可預測性,暫且認為是安全的。這是一種認證手段。而Token,如果指的是OAuth Token或類似的機制的話,提供的是 認證 和 授權 ,認證是針對用戶,授權是針對App。其目的是讓 某App有權利訪問 某用戶 的信息。這里的Token是唯一的。不可以轉移到其它App上,也不可以轉到其它 用戶 上。轉過來說Session。Session只提供一種簡單的認證,即有此SID,即認為有此User的全部權利。是需要嚴格保密的,這個數據應該只保存在站方,不應該共享給其它網站或者第三方App。所以簡單來說,如果你的用戶數據可能需要和第三方共享,或者允許第三方調用API接口,用Token。如果永遠只是自己的網站,自己的App,用什么就無所謂了。token就是令牌,比如你授權(登錄)一個程序時,他就是個依據,判斷你是否已經授權該軟件;cookie就是寫在客戶端的一個txt文件,里面包括你登錄信息之類的,這樣你下次在登錄某個網站,就會自動調用cookie自動登錄用戶名;session和cookie差不多,只是session是寫在服務器端的文件,也需要在客戶端寫入cookie文件,但是文件里是你的瀏覽器編號.Session的狀態是存儲在服務器端,客戶端只有session id;而Token的狀態是存儲在客戶端。
sessionStorage 、localStorage和cookie之間的區別
共同點:都是保存在瀏覽器端,且都遵循同源策略。
不同點:在于生命周期與作用域的不同。
作用域:localStorage只要在相同的協議、相同的主機名、相同的端口下,就能讀取/修改到同一份localStorage數據。
sessionStorage比localStorage更嚴苛一點,除了協議、主機名、端口外,還要求在同一窗口(也就是瀏覽器的標簽頁)下:
生命周期:localStorage 是持久化的本地存儲,存儲在其中的數據是永遠不會過期的,使其消失的唯一辦法是手動刪除;而sessionStorage是臨時性的本地存儲,它是會話級別的存儲,當會話結束(頁面被關閉)時,存儲內容也隨之被釋放。cookie一般由服務器生成,可設置失效時間,如果在瀏覽器端生成cookie,默認關閉瀏覽器后失效。
存放數據大小:cookie大約在4k左右。
localStorage和SessionStorage一般為5MB左右。
與服務端通信:
cookie每次都攜帶在HTTP的頭中,如果使用cookie保存過多數據會帶來性能問題。
localStorage和SessionStorage僅在客戶端(瀏覽器)中保存,不參與服務端通信。
易用性:cookie需要程序員自己封裝,源生的cookie接口不友好。local/session源生接口可以接受,也可以再次封裝來對Object和Array有更好的支持。
Token放在 cookie, sessionStorage 和 localStorage 中的區別
Token是什么
- Token 其實就是訪問資源的憑證
- 一般是用戶通過用戶名密碼登錄成功之后,服務器將登錄憑證作為數字簽名,加密之后得到的字符串就是 Token
區別
- Token 在用戶登錄成功之后返回給客戶端,客戶端組要有三種存儲方式
- 儲存在 localStorage 中,每次調用接口時放在http請求頭里面,長期有效
- 儲存在 sessionStorage 中,每次調用接口時,把它當為一個字段傳給后臺,瀏覽器關閉自動清除
- 儲存在 cookie 中,每次調用接口會自動發送,不過缺點是不能跨域
深入了解
- 將 Token 存儲在 webStorage(localStorage,sessionStorage) 中可以通過同域的js訪問,這樣導致很容易受到 xss 攻擊,特別是項目中引入很多第三方js庫的情況下,如果js腳本被盜用,攻擊者就可以輕易訪問你的網站。
xss攻擊:是一種注入代碼攻擊,通過在網站里注入script代碼,當訪問者瀏覽網站的時候通過注入的script代碼竊取用戶信息,盜用用戶身份等
- 將 Token 存儲在 cookie 中,可以指定 httponly 來防止 js 被讀取,也可以指定 secure 來保證 Token 只在 HTTPS 下傳輸,缺點是不符合 RestFul 最佳實踐,容易受到 CSRF 攻擊。
CSRF: 跨站點請求偽造,攻擊者盜用已經認證過的用戶信息,以用戶信息的名義進行操作(轉賬,購買商品等),由于身份已經認證過了,所以網站會認為此操作是用戶本人操作。 CSRF 并不能拿到用戶信息,但它可以盜用用戶的憑證進行操作。
總結
以上是生活随笔為你收集整理的cookie、Session、Token、sessionStorage、localStorage简介__Token放在 cookie, sessionStorage 和 localStorage中区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 嵌入式设计与开发实践要点[1.2]-嵌入
- 下一篇: python3的3D开发-基于blend