HTTP 狀態管理: cookie與session
大家先來想想一個例子,如果我今天要開一間咖啡館,然後有一個滿10點送50元飲料,我該怎麼去紀錄?
- 集點蓋章
- 老闆自備簽名章
一般人可能會講上面那兩點,但事實上上面那兩個方法有點問題,我們無法知道雙方會部會造假,因此得出了第三個方法,你有自己的會員蓋章,老闆也準備自己的系統紀錄,假如要兌換,就核對一下即可頒發。cookie與session就是為了解決第三個辦法的蓋章卡以及老闆的系統。
COOKIE
是甚麼
一小段文本訊息,客戶端請求服務器,服務器就頒發一個cookie給客戶端瀏覽器(蓋章卡) , 客戶端瀏覽器就把它保留下來,假設下次再請求,瀏覽器會把cookie跟網址提交給服務器,讓服務器辨別用戶狀態。
流程圖
原理
如何獲取
可以在瀏覽器打網址的地方輸入下面這行javascript:alert(document.cookie)
Session
是甚麼
服務器端紀錄用戶訊息的機制(老闆的紀錄器)
原理
有效期
基本上cookie有效時間會非常非常久,而session因為視服務端,會有大量的session紀錄,可能會內存溢出,因此會有失效,又分成下面幾種
- 自動失效: session超時
- 主動失效: 調用HttpSession.invalidate( )
- 服務器進程被停止
兩者比較
存放位置不同 (一個存在服務器,一個存在客戶端)
安全性不同
cookie可能會被其他程式窺視,因此cookie盡量不要放帳號密碼
有效期不同 (session會自動清理,cookie基本上不會消失因為通常沒有像session有內存溢出的問題)