---
# System prepended metadata

title: 12th 鐵人賽 Day_08 cookie?
tags: [12th 鐵人賽]

---

---
title: 12th 鐵人賽 Day_08 cookie?
tags: 12th 鐵人賽
--- 
# 12th 鐵人賽 Day_08 cookie?

嗨！各位朋友大家好，打給後，歹嘎吼，胎尬喉，我是阿圓，有請今天的one piece！
![](https://i.imgur.com/URxA3AU.jpg)
(不覺得騙人布其實也超強嗎？)

## cookie?
昨天我們說到實作 session 機制的方式有兩種，一種是利用網址，而另一種是 cookie 。今天要來講 cookie 的部分：

首先要先知道 cookie 跟 session 是不一樣的東西，`session 是一種讓 request 變成 stateful 的一種機制，而 cookie 是一種實作這個機制的一種方式`

那 cookie 到底是如何作用的呢？其實昨天有簡單提到， cookie 很像我們去餐廳點菜時，廚房給我們的那張明細單，上面記錄了所有我們點的菜，而廚房根據你的那張明細單給你菜。

回到網路世界的話是這樣：

瀏覽器發送一個 request 給 server ，而 server 傳回 response 的時候，叫瀏覽器把狀態設置成 cookie 存起來，下一次， server 會根據這張 cookie 內容來決定狀態。

休但幾咧！這樣的狀況好像有些問題？！
![](https://i.imgur.com/l4GENxz.jpg)

## 面臨的問題
1. 如果我的明細單掉了．．．，是不是代表任何人都可以領走我的菜？因為廚房只認明細單。
2. 如果廚房是根據我的明細單來出菜給我，那我只要偷偷的在明細單上自己多加幾道菜，不就．．．誒嘿嘿～反正他們只認明細單呀～
![](https://i.imgur.com/3wBb5Mi.gif)

咳！是的，回到網路世界的話，當 cookie 設置好後，任何人擁有你的cookie 都可以存取你在 server 上的資料；或是，你在 cookie 加點東西， server 也都是會承認的，因為server是根據那張cookie來決定狀態。


## 解套方式
### **Cookie-based session**
你說把 cookie 上的東西加密起來？是的，這也是一個好方法，這就是所謂的 `Cookie-based session`，把東西都存在 cookie 裡並加密，這樣降低了被竄改的機率。
不過當要儲存的狀態越來越多，你的 cookie 也就越來越肥大了．．．，別忘了，cookie 是存在瀏覽器裡的，超過瀏覽器的限制，瀏覽器就不理你了。

因此，當要儲存的狀態很多的時候，用`Session-based session`會是比較好的選擇。

### **Session-based session**
一樣用點菜去比喻的話．．．，有去麥當勞點過餐吧？點餐之後，會給你一張明細表(讓你看的)，也會給你一張號碼牌，而你要拿你的號碼牌去領餐，廚房那邊會根據這個號碼牌來出餐。號碼牌就是 cookie，號碼就是所謂的 `session ID`。

讓我們回到網路世界來：server 會要求瀏覽器將一組不易重複的 ID，也就是上面提到的`session Id`，設置成cookie，而 server 那邊利用這組 ID 去比對寫在 server 端的狀態(Data)。

這樣的話就比較不會有被竄改的問題(機率不能說沒有，但超級低)，不過特別要注意的是，server 一樣只會認那張 session ID ，若是有別人拿到這個一樣是有權存取你的資料的，所以當有駭客拿到一批 session ID 或是server 那邊有被攻擊或是什麼的，通常都會把所有的 session ID 清掉，下次再重新發送。

---

以上就是cookie的內容了，幫各位統整一下：

1. cookie 是一種實作 session 這個機制的一種方式
2. cookie 出現後會有資料被竄改的問題，避免方式有：
    1. **Cookie-based session**
        將狀態通通寫在 cookie 裡，並加密。缺點是狀態多的時候， cookie 會很肥，而瀏覽器存 cookie 是有限制的，超過就不給存了。
    2. **Session-based session**
        發session ID給瀏覽器並存成cookie，其他的狀態放在server裡，利用cookie裡的sessionID，來決定狀態。

感謝各位看到這邊，若有任何建議，請各位不吝指教！我們明天見！
![](https://i.imgur.com/PPbpd2b.gif)

--- 

#### 參考文章
[白話 Session 與 Cookie：從經營雜貨店開始](https://bre.is/E3onkFYt)