天天看點

接口基礎cookie, session,token的差別

為什麼要有session,cookie,token的出現?

答:是由于網絡中http協定造成的,因為http本身是無狀态協定,這樣,無法确定你的本次請求和上次請求是不是你發送的。如果要進行類似論壇登陸相關的操作,就實作不了了。

cookie 機制:

cookie并不是虛無缥缈的東西,它隻是一個存儲方式是通過擴充http協定來實作的. 浏覽器通路伺服器的時候,伺服器會在response header裡添加訓示浏覽器生成cookie的規則,浏覽器按照一定的規則在request header裡生成cookie并發給伺服器,

伺服器校驗規則,如果校驗通過會一直保持會話,cookie機制采用的是在用戶端保持狀态的方案.

session 機制:

session機制采用的是在服務端保持狀态的方案,把資料儲存在伺服器裡而cookie 是把資料儲存在用戶端裡,

伺服器儲存的資料會自動生成一個sessionID 也就是我們說的key給用戶端, session ID 可以儲存在cookie裡,URL ,POST data裡也行.

如果下次通路 用戶端會把session ID 發給服務端進行比對,如果校驗通過會保持回話.

總結:

舉個例子:

張三如果想取錢,可以通過 兩個方式 1. cookie 2. session

1.如果想通過cookie 的方式 就是需要拿着存折 裡面有詳細的資訊,餘額和取款資訊都可以看到

2.如果想通過session 的方式 就是拿着一個銀行卡,裡面有個卡号進行取錢,裡面的資訊進行了隐藏.

将登陸資訊等重要資訊存放為SESSION,這就是安全的問題.

其他資訊如果需要保留,可以放在COOKIE中,

Token 機制:

有了sesion 和cookie 為什麼也要有token 呢?

答: session會在一定時間内儲存在伺服器上。當通路增多,會比較占用你伺服器的性能

考慮到減輕伺服器性能方面.

**産生過程:**浏覽器第一次通路伺服器,根據傳過來的唯一辨別(比如userID),服務端會通過一些算法,如常用的HMAC-SHA256算法,然後加一個密鑰,生成一個token,然後通過BASE64編碼一下之後将這個token發送給用戶端;用戶端将token儲存起來,下次請求時,帶着token,伺服器收到請求後,然後會用相同的算法和密鑰去驗證token,如果通過,執行業務操作,不通過,傳回不通過資訊.

解釋session是空間換時間,而token是時間換空間?

1.session 直接拿sessionID 進行比對,速度很快,但是token 需要加密解密再驗證步驟,速度相對會更慢

2.token 不會再伺服器儲存資料,能做到真正無狀态, 空間節省了不少.

舉個例子:

方案 A :我發給你一張身份證,但隻是一張寫着身份證号碼的紙片。你每次來辦事,我去背景查一下你的 id 是不是有效。

方案 B :我發給你一張加密真正的身份證,以後你隻要出示這張卡片,我就知道你一定是自己人。

就這麼個差别。