http是無狀態的,也就是說斷開會話了服務器就不記得任何事情了,但這樣對于用戶會很麻煩,因為要不停輸入用戶名和密碼
cookie是放在瀏覽器里的數據,第一次訪問后服務器會set cookie,然后瀏覽器保存這個cookie,沒發送都帶著這個cookie,這樣就不用每次我們手動輸入賬戶名和密碼,但這并不安全,假設電腦被黑了,瀏覽器里的個人信息就泄露了。并且一旦我們換個瀏覽器或者換臺電腦,就沒有這個cookie了。
所以,當用戶第一次登陸后,服務器會創建一個帶有簽名的無規律字符串session(會話)返回給用戶瀏覽器,這樣就算黑客拿到session id也沒啥大用,這是帶簽名的。當session的生命周期結束就會讓用戶重新輸入用戶名和密碼
但是隨著互聯網發展,訪問量激增,每個用戶都存儲一個session id在服務器內存里,服務器吃不消。并且session保存在一個服務器節點里,要是訪問到別的節點上就識別不出來了。json web token(jwt)應運而生。現在是token(令牌)存在了瀏覽器客戶端,服務器端只是來驗證這個token,相當于是cpu換內存用
具體來說就是客戶端發送header、payload、signature,然后服務端通過前兩模塊和加密密鑰來計算比對signature,
token的方式,可以看出服務端密鑰的重要性就顯而易見,一旦泄露整個機制就崩塌了,這個時候就需要考慮HTTPS了。