昨天在 session 小節講述了實作方式可以把狀態存在網址中,但大多數做法不會是如此,因為危險性太高。
那麼有其他方式嗎?答案是有的!
Server 傳送給瀏覽器的一小段資料,並且請瀏覽器保存起來,以便往後向相同的伺服器發送請求的同時,附上這段 Cookie 的資料。
以昨天早餐店的例子來說,我點完餐並且結帳之後,想在餐點準備期間先去影印店印報告,於是老闆把餐點寫在紙條上,把這張紙條交給我,讓我在辦完事情後,拿著這張紙條去兌換餐點。老闆就像 server 的角色,而我是客戶端收到老闆發給我的紙條,紙條就是 cookie!
但是,有個小小的狀況,早餐店老闆在月底結算營收時,發現賣出去的餐點數量,和收入無法核對到正確數字。於是展開調查,發現有些客人偷偷添加餐點在紙條上。老闆為了因應這樣的情況而改變方式,當客人點餐時,他只發給客人一個號碼牌,而在他自己的小本本上紀錄每個號碼牌所對應到的餐點有哪些,在客人來取餐時,要給這張號碼牌,讓老闆可以確認這號碼對應到的餐點。
回到網頁使用者體驗來看,因為HTTP的每次請求都是獨立的,不會紀錄狀態,在沒有 cookie 情況下,當你登入會員後,每次跳轉頁面就要再輸入一次帳號密碼才能執行,這樣不是很麻煩嗎?所以才會有這樣的機制產生,當使用者在第一次登入時,server 會發送一個 cookie 給使用者的瀏覽器,紀錄當前使用者為登入狀態,如此一來,使用者在跳轉頁面時,如果會需要用到身份驗證的功能(比方說購物車),瀏覽器發送請求時,會一併出示 cookie 給 server 進行身份核對,如果正確就給予回應。
參考資料:
白話 Session 與 Cookie:從經營雜貨店開始
麥克的半路出家筆記
學無止盡,每天都要進步一點點!