session 和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擴展性的弊端。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章