嗨!各位朋友大家好,打給後,歹嘎吼,胎尬喉,我是阿圓,一樣開始之前,有請今天的one piece!
(不覺得騙人布其實也超強嗎?)
昨天我們說到實作 session 機制的方式有兩種,一種是利用網址,而另一種是 cookie 。今天要來講 cookie 的部分:
首先要先知道 cookie 跟 session 是不一樣的東西,session 是一種讓 request 變成 stateful 的一種機制,而 cookie 是一種實作這個機制的一種方式
那 cookie 到底是如何作用的呢?其實昨天有簡單提到, cookie 很像我們去餐廳點菜時,廚房給我們的那張明細單,上面記錄了所有我們點的菜,而廚房根據你的那張明細單給你菜。
回到網路世界的話是這樣:
瀏覽器發送一個 request 給 server ,而 server 傳回 response 的時候,叫瀏覽器把狀態設置成 cookie 存起來,下一次, server 會根據這張 cookie 內容來決定狀態。
休但幾咧!這樣的狀況好像有些問題?!
咳!是的,回到網路世界的話,當 cookie 設置好後,任何人擁有你的cookie 都可以存取你在 server 上的資料;或是,你在 cookie 加點東西, server 也都是會承認的,因為server是根據那張cookie來決定狀態。
你說把 cookie 上的東西加密起來?是的,這也是一個好方法,這就是所謂的 Cookie-based session
,把東西都存在 cookie 裡並加密,這樣降低了被竄改的機率。
不過當要儲存的狀態越來越多,你的 cookie 也就越來越肥大了...,別忘了,cookie 是存在瀏覽器裡的,超過瀏覽器的限制,瀏覽器就不理你了。
因此,當要儲存的狀態很多的時候,用Session-based session
會是比較好的選擇。
一樣用點菜去比喻的話...,有去麥當勞點過餐吧?點餐之後,會給你一張明細表(讓你看的),也會給你一張號碼牌,而你要拿你的號碼牌去領餐,廚房那邊會根據這個號碼牌來出餐。號碼牌就是 cookie,號碼就是所謂的 session ID
。
讓我們回到網路世界來:server 會要求瀏覽器將一組不易重複的 ID,也就是上面提到的session Id
,設置成cookie,而 server 那邊利用這組 ID 去比對寫在 server 端的狀態(Data)。
這樣的話就比較不會有被竄改的問題(機率不能說沒有,但超級低),不過特別要注意的是,server 一樣只會認那張 session ID ,若是有別人拿到這個一樣是有權存取你的資料的,所以當有駭客拿到一批 session ID 或是server 那邊有被攻擊或是什麼的,通常都會把所有的 session ID 清掉,下次再重新發送。
以上就是cookie的內容了,幫各位統整一下:
感謝各位看到這邊,若有任何建議,請各位不吝指教!我們明天見!