白話session、token、cookie
話前宣告 :我對技術的一貫態度,不求刨根問底,也不會淺嘗輒止,點到為止。
無狀態
先從Http說起,Http是應用層的傳輸協議,現在談的session、cookie、token基本都是web應用涉及到的會話保持技術。最早的web應用就是一個資源瀏覽頁面,使用者發起Http請求,服務端找到對應的資源並返回響應,這貌似就是超文字傳輸協議最白話的解釋。這就好比你開了家飯店,客人花錢來吃飯,每個客人吃完就滾蛋,誰也不認識誰,這就是無狀態。
session
後來web應用越來越複雜(許可權控制,安全支付,千人千面),服務端的業務必須識別使用者的身份,這裡的識別是指每一次的Http請求,最常見的就是電子商務。使用者登入後,有伺服器頒發一個會話session,每個session有唯一的sessionId,每個session在瀏覽器關閉之前有自己的有效期。登陸後每次發起Http請求都會帶著sessionId(url地址重寫,或者表單隱藏域提交),這樣服務端就可以識別每個使用者了,現在使用者和服務端通過session維持了狀態。
這就好比你開了家快餐店,因為客人太多,於是你給每個客人發個號碼牌,客人通過號碼牌來你這取餐,這樣你和客人之間就保持了一個根據號碼牌識別身份的狀態機制。
cookie
只用session來維持會話,關閉瀏覽器session就失效了,這樣還是不能很好地保持這個狀態機制,後來有了cookie,可以把一部分資料寫到客戶端瀏覽器。上面說的sessionId就可以寫到cookie裡,瀏覽器關閉再重啟後,訪問web應用,瀏覽器還是可以把指定訪問範圍內的cookie資訊帶給服務端,這樣服務端拿到sessionId就可以找到session使用者資訊。
購物網站未登入使用者的購物車通常就是利用cookie技術,萬變不理其宗,就是利用cookie儲存在客戶端,瀏覽器可以把可見範圍內的cookie帶到服務端。
這就好比你開了家飯店,搞了一套全民會員制,每個客人發一張會員卡,客人來吃飯,可以出示會員卡或者自報手機號,你根據會員卡或手機號去電腦裡查詢客人相關資訊,並給予積分,充值,或扣費。
token
最早接觸token的時候是處理客戶端重複請求問題,給客戶端頒發一個token,利用攔截器檢查使用者是否重複提交請求。類似的,利用token解決狀態保持基本也是一個路子。服務端給使用者頒發一個加密後的token,只有服務端可以解密(最簡單就是使用非對稱加密),使用者請求帶著token來,可以用cookie帶來或者使用客戶端本地儲存,服務端就地解密決定是否放行通過。
這就好比你開了家無人自助餐廳,客戶自行刷卡進入,沒有其他工作人員。
結束: 不知所言,歡迎拍磚,