前言
HTTP是個Stateless的協議, 意思是說Client端發請求時, 並無法得知上一個請求的結果, 比如說做完登陸後, 網頁跳到了商品頁面時, 系統怎麼知道使用者登錄過了, 所以我們需要一種方式來儲存資料粗略的講Cookie和Session是一種資料儲存的方式, 用來紀錄使用者在某特定網站下的活動資訊, 讓無狀態的HTTP協議擁有記憶的能力
Cookie
將在資料存在Client Side, 可以被看, 被改(除非用Signed Cookie, Server side拒絕改過的cookie), 屬於較不安全的儲存方式, 所以通常用來存放敏感度低的資料, 像是Remember Me的資訊若要防止Cookie被竄改的話, 可以用簽章的方式確認資料是否被更動過, 而Server Side發現簽章有問題時再拒絕請求
基本上簽章的數位長度足夠的話,也不太需要擔心被偽造
Session
將資料存在Server Side上, 相較於Cookie來說算是比較安全的儲存作法 通常Server Side會返回一組Session Id 給Client存到Cookie裡面, 接下來的請求會根據Id去把先前存放的資訊給挖出來儲存 Session 有下列方法:
1. Memory
2. Cookie
3. Cache
存Memory 會有Memory Leak的風險, 存Cookie會使的請求傳輸量變大, 所以通常正式環境主要還是存在Redis Cache中
留言
張貼留言