為什麼使用token?session與token的區別
目錄
一、session的狀態保持及弊端
當用戶第一次通過瀏覽器使用使用者名稱和密碼訪問伺服器時,伺服器會驗證使用者資料,驗證成功後在伺服器端寫入session資料,向客戶端瀏覽器返回sessionid,瀏覽器將sessionid儲存在cookie中,當用戶再次訪問伺服器時,會攜帶sessionid,伺服器會拿著sessionid從資料庫獲取session資料,然後進行使用者資訊查詢,查詢到,就會將查詢到的使用者資訊返回,從而實現狀態保持。
弊端:
1、伺服器壓力增大
通常session是儲存在記憶體中的,每個使用者通過認證之後都會將session資料儲存在伺服器的記憶體中,而當用戶量增大時,伺服器的壓力增大。
2、CSRF跨站偽造請求攻擊
session是基於cookie進行使用者識別的, cookie如果被截獲,使用者就會很容易受到跨站請求偽造的攻擊。
3、擴充套件性不強
如果將來搭建了多個伺服器,雖然每個伺服器都執行的是同樣的業務邏輯,但是session資料是儲存在記憶體中的(不是共享的),使用者第一次訪問的是伺服器1,當用戶再次請求時可能訪問的是另外一臺伺服器2,伺服器2獲取不到session資訊,就判定使用者沒有登陸過。
二、token認證機制
token與session的不同主要在①認證成功後,會對當前使用者資料進行加密,生成一個加密字串token,返還給客戶端(伺服器端並不進行儲存)
②瀏覽器會將接收到的token值儲存在Local Storage中,(通過js程式碼寫入Local Storage,通過js獲取,並不會像cookie一樣自動攜帶)
③再次訪問時伺服器端對token值的處理:伺服器對瀏覽器傳來的token值進行解密,解密完成後進行使用者資料的查詢,如果查詢成功,則通過認證,實現狀態保持,所以,即時有了多型伺服器,伺服器也只是做了token的解密和使用者資料的查詢,它不需要在服務端去保留使用者的認證資訊或者會話資訊,這就意味著基於token認證機制的應用不需要去考慮使用者在哪一臺伺服器登入了,這就為應用的擴充套件提供了便利,解決了session擴充套件性的弊端。