什麼是 cookie, session?

stanley

stanley

3/27/2025

post-cover

什麼是 cookie, session ?

在介紹什麼是 cookie, session 之前,要先知道一個很重要的概念,那就是

http 協定是一個無狀態的溝通方式,也就是說伺服器是不會保存兩次不同 request 的資料

但在現在高戶動的網站下,我們會需要記住使用者在網頁上所做過的事情,例如電商網站判斷使用者是否登入了,又或是購買了哪些商品?也因此有了 cookie 的功能,可以在瀏覽器紀錄使用者當前的狀態,並且在每一次跟後端伺服器溝通時把 cookie 帶上。

Cookie 由瀏覽器處理,具有幾個特性:

  • 特定網域:只針對原本的 網域(domain) 起作用。舉例: 在 *.myExample.com 存入的 cookie,不會出現在 *.not-myExample.com
  • 有生命期限: 到了所設定的生命期限之後會失效。
  • 在向該 domain 的 server 發送請求時,也會被一併帶進去該請求中

聽起來很方便,但他有幾個缺點

  • cookie 的容量限制是 4kb 左右,無法儲存太多東西
  • cookie 每次請求時都會帶上,因此還是會造成一些效能上的影響
  • cookie 是可以透過前端篡改的(架設電商商品價格存在 Cookie ,而後端又單純只透過前端資料把訂單寫入資料庫,那我就可以用 1 元買到最新的 iphone 16 )

第3點竄改的問題,有人想到那我把資料進行加密是不是就可以了,但這樣的問題就會是隨著資料越來越多,加密的檔案會超過容量限制

因為 cookie 的限制,我們不可能把使用者的所有狀態資料全部儲存進來,這時就有人想到,不如我們只要在使用者第一次訪問伺服器時給予他一個 id 並存到 cookie 裡面 (set-cookie),同時伺服器也儲存這個 id 以及他所有的狀態,這樣每次透過比對 id 找出資料即可,也因此有了 Session

參考資料