---
# System prepended metadata

title: Cookie & Session

---

# Cookie & Session
## Cookie 是什麼？在 HTTP 這一層要怎麼設定 Cookie，瀏覽器又是怎麼把 Cookie 帶去 Server 的？

Cookie 是個儲存在瀏覽器的小型文字檔案，伺服器可以透過 Set-Cookie 這個 response header 來讓瀏覽器儲存相對應的 Cookie。而下次瀏覽器發送 Request 時，會把相對應的 Cookie 放在 Header 一起傳過去，Server 就可以拿到資料。



## Session 是什麼？

Session 原本英文的意思是指一段時間，在網路的世界我覺得真正的意思是指 Stateful session 即有狀態的一段時間，因為 HTTP 協定是一個無狀態協定，每個 Request 都是獨立的、彼此沒有關聯，而透過建立 Session 就可以讓 Request 保留狀態，伺服器就能辨別不同的 Request 是否為同一個人所發出。

在 Cookie 還沒出現以前，一樣可以建立 Session，像是可以把狀態資訊用 Qurey String 的方式放在網址列上面或使用其他方法。但 Cookie 出現以後建立 Session 變成一件更容易的事，只要使用 Set-Cookie 與 Cookie 這兩個 header 就好了。

建立 Session 之後，所儲存的狀態就叫做 Session information，可以翻作 Session 資訊。若是選擇把這些資訊存在 Cookie 裡面，就叫做 Cookie-based session；還有另一種方法則是在 Cookie 裡面只存一個 SessionID，其他的 Session 資訊都存在 Server 端，靠著這個 ID 把兩者關聯起來。