目錄
一、session的狀態(tài)保持及弊端
二、token認(rèn)證機制
一、session的狀態(tài)保持及弊端
當(dāng)用戶第一次通過瀏覽器使用用戶名和密碼訪問服務(wù)器時,服務(wù)器會驗證用戶數(shù)據(jù),驗證成功后在服務(wù)器端寫入session數(shù)據(jù),向客戶端瀏覽器返回sessionid,瀏覽器將sessionid保存在cookie中,當(dāng)用戶再次訪問服務(wù)器時,會攜帶sessionid,服務(wù)器會拿著sessionid從數(shù)據(jù)庫獲取session數(shù)據(jù),然后進(jìn)行用戶信息查詢,查詢到,就會將查詢到的用戶信息返回,從而實現(xiàn)狀態(tài)保持。
弊端:
1、服務(wù)器壓力增大
通常session是存儲在內(nèi)存中的,每個用戶通過認(rèn)證之后都會將session數(shù)據(jù)保存在服務(wù)器的內(nèi)存中,而當(dāng)用戶量增大時,服務(wù)器的壓力增大。
2、CSRF跨站偽造請求攻擊
session是基于cookie進(jìn)行用戶識別的, cookie如果被截獲,用戶就會很容易受到跨站請求偽造的攻擊。
3、擴展性不強
如果將來搭建了多個服務(wù)器,雖然每個服務(wù)器都執(zhí)行的是同樣的業(yè)務(wù)邏輯,但是session數(shù)據(jù)是保存在內(nèi)存中的(不是共享的),用戶第一次訪問的是服務(wù)器1,當(dāng)用戶再次請求時可能訪問的是另外一臺服務(wù)器2,服務(wù)器2獲取不到session信息,就判定用戶沒有登陸過。
二、token認(rèn)證機制
token與session的不同主要在①認(rèn)證成功后,會對當(dāng)前用戶數(shù)據(jù)進(jìn)行加密,生成一個加密字符串token,返還給客戶端(服務(wù)器端并不進(jìn)行保存)
②瀏覽器會將接收到的token值存儲在Local Storage中,(通過js代碼寫入Local Storage,通過js獲取,并不會像cookie一樣自動攜帶)
③再次訪問時服務(wù)器端對token值的處理:服務(wù)器對瀏覽器傳來的token值進(jìn)行解密,解密完成后進(jìn)行用戶數(shù)據(jù)的查詢,如果查詢成功,則通過認(rèn)證,實現(xiàn)狀態(tài)保持,所以,即時有了多臺服務(wù)器,服務(wù)器也只是做了token的解密和用戶數(shù)據(jù)的查詢,它不需要在服務(wù)端去保留用戶的認(rèn)證信息或者會話信息,這就意味著基于token認(rèn)證機制的應(yīng)用不需要去考慮用戶在哪一臺服務(wù)器登錄了,這就為應(yīng)用的擴展提供了便利,解決了session擴展性的弊端。
|