用於讓 server 記住 client 的行為與資料。
Cookie
由於 HTTP 協定是無狀態((Stateless)的,server 端無法得知使用者在前端的操作內容,阻礙了前端與後端對話,因此 cookie 就是被設計來解決這個問題的機制。
- 當 server 想要儲存使用者的某些狀態時,就可以發送 cookie 給 client
- http header 裡面其中一個欄位
- key / value 的形式儲
- 檔案大小最多 4Kb
- 以明文的方式在網際網路上傳輸及在 Client 端電腦儲存,所以不建議儲存敏感資料
- 儲存在 client 的瀏覽器
- 儲存位置
- 記憶體 cookie:由瀏覽器維護,當瀏覽器關閉,cookie也隨之消失,為非持久性的
- 硬碟 cookie:存在用戶端硬碟中,有一個過期時間,除非使用者手動清理cookie或是超過過期時間,否則cookie不會消失,為持久性的
Session
- 儲存在 server 端
- session 需要 cookie 的輔助才能產生運作
- server 會傳送帶有 session id 的 cookie 給 client,當下一個 request 及cookie 再被送至 server 端時,會用 cookie 中的 session id 來辨認每個使用者所儲存的狀態與 data。
- 相對於 cookies,session 多用來儲存敏感的資料,也常常成為攻擊的目標 Session Hijacking
rails 裡的 Session & Cookie
session
1 2 3 4 5 6 7 |
|
session store
config/initializers/session_store.rb
裡面可以設定
:cookie_store
(預設):active_record_store
使用資料庫來儲存(安全性較高)- 需搭配 activerecord-session_store gem,產生sessions資料表
:mem_cache_store
使用Memcached快取系統來儲存,適合逾須兼顧效能的高流量網站
Rails預設採用 Cookies session storage 來儲存 Session 資料,它是將 Session 資料透過 config/secrets.yml 的 secret_key_base 編碼後放到瀏覽器的 Cookie 之中
cookie
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
1 2 3 4 5 |
|
官方文件:
參考文件:
- Cookie 和 Session 的神秘關係
- Action Controller - 控制 HTTP 流程
- Web 技術中的 Session 是什麼?
- session / cookie 解釋
- Rails - Sessions, Cookies and Flash
- [译] Rails Sessions 是如何工作的?
- cookie原理与实现(rails篇)
- session原理与实现(rails篇)
- COOKIE與SESSION比較
- 第 8 章 登录和退出
- 详说 Cookie, LocalStorage 与 SessionStorage | 咀嚼之味
- Cache / Session / Cache 簡單說
- 九种浏览器端缓存机制知多少 | ouvenzhang的博客
- 讓我們來談談 CSRF
- [不是工程師] Cookie 是文件還是餅乾?簡述HTTP網頁紀錄會員資訊的一大功臣。
- [不是工程師] 會員系統用Session還是Cookie? 你知道其實他們常常混在一起嗎?
- Day11-Cookie & 登入 I(原理篇)