來源:
http://blog.csdn.net/cwb1128/article/details/7899873
http://blog.csdn.net/ghsau/article/details/20395681
token
http://www.reibang.com/p/576dbf44b2ae
session
當用戶第一次通過瀏覽器使用用戶名和密碼訪問服務器時,服務器會驗證用戶數(shù)據(jù)沼填,驗證成功后在服務器端寫入用戶的sessionID數(shù)據(jù)桅咆,向客戶端瀏覽器返回sessionid,瀏覽器將sessionid保存在cookie中坞笙。當用戶再次訪問服務器時岩饼,會通過cookie自動攜帶sessionid荚虚,服務器會拿著sessionid從數(shù)據(jù)庫獲取session數(shù)據(jù),然后進行用戶信息查詢籍茧,查詢到版述,就會將查詢到的用戶信息返回,從而實現(xiàn)狀態(tài)保持寞冯。
session超過一定時間(一般為30分鐘)沒有被訪問時渴析,服務器就會認為這個session對應的客戶端已經(jīng)停止活動,然后將這個session刪除吮龄。用以節(jié)省空間俭茧。
session機制帶來的問題
1.每個用戶都要在服務器保存一條session數(shù)據(jù),隨著用戶量增大漓帚,服務器負載增大母债;
2.session存在服務器內(nèi)存,下次用戶必須請求在該臺服務器上才能拿到授權(quán)資源尝抖,這樣就限制了負載均衡毡们,也限制了應用的擴展能力。
3.由于瀏覽器cookie機制的自動使用昧辽,只有客戶端和服務端在同一臺服務器才可使用(跨域如果也帶上了cookie衙熔,會存在安全問題),因此當客戶端和服務端在不同服務器奴迅,session無法使用青责。
4.CSRF跨站偽造請求攻擊。
token
1.用戶認證成功后取具,服務端對用戶數(shù)據(jù)進行加密生成token脖隶,返回給客戶端(服務端不進行保存),客戶端將token存儲在local storage(通過代碼寫入和獲取暇检,而非自動)产阱。再次訪問服務端時帶上token,服務端對token進行解密块仆,然后查詢用戶數(shù)據(jù)构蹬,查詢成功則通過認證實現(xiàn)狀態(tài)保持。
2.因此悔据,即時有了多臺服務器庄敛,服務器也只是做了token的解密和用戶數(shù)據(jù)的查詢,它不需要在服務端去保留用戶的認證信息或者會話信息科汗,這就意味著基于token認證機制的應用不需要去考慮用戶在哪一臺服務器登錄了藻烤,這就為應用的擴展提供了便利,解決了session擴展性的弊端。
3.適用于前后端分離的項目怖亭。