這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
一、前言
Cookie就是以Key,Value的形式儲存在瀏覽器端的資料。
https://baike.baidu.com/item/cookie/1119
二、工作原理&應用情境
在Request的時候,瀏覽器將Cookie資訊放在HTTP-Request Headers中。
在Response的時候,瀏覽器儲存HTTP-Response Headers資訊中的Cookie資訊。
Cookie的核心資訊包含三個部分:Name、Value、到期時間。
Cookie的儲存是覆蓋式的,所以Cookie的添加、更新、刪除對於瀏覽器來說都是執行設定(set)的動作。
- 記住使用者名稱
- 購物車資訊
三、特點
1、儲存特點
- (1)儲存大小受限,跟瀏覽器版本有關
- (2)儲存條數受限,跟瀏覽器版本有關
- (3)字元編碼為Unicode,不支援直接儲存中文
- (4)儲存內容可以被輕鬆查看,不建議儲存敏感資訊
- (5)可靠性差,可能隨時都會因為各種原因被刪除
- (6)儲存屬性除了Name、Value、到期時間,還有Domian、Path,當前域可以操作當前域子域、父網域名稱的Cookie,當前Path,可以操作當前Path以及當前Path子、父Path下的Cookie。
domian:www.ken.io 是ken.io的子域,是test.www.ken.io的父域,同時也是blog.ken.io的同級網域名稱。www.ken.io下的應用可以訪問ken.io以及*.www.ken.io下的Cookie,但是不能訪問blog.ken.io下的Cookie
path:例如頁面:http://ken.io/home/about 路徑是/home/about,這個路徑下可以訪問到根路徑/以及/home/*路徑下的Cookie,當時不能訪問到/category下的Cookie
2、傳輸特點
- (1)每次Request用戶端符合domian以及path要求的Cookie都會通過Request Headers傳輸到伺服器端
- (2)傳輸的Cookie大小會受到瀏覽器以及Web伺服器的限制
3、安全特點
- Cookie中的資訊很容易被查看,建議加密後儲存
- Cookie容易被XSS攻擊利用,可以設定HttpOnly=true,不允許用戶端訪問(99.9%的瀏覽器有效)
四、使用經驗/建議
- 不要儲存未經加密敏感資訊(安全性)
- 如果不需要在用戶端訪問,設定HttpOnly=true(安全性)
- 設定合理的到期時間(傳輸效率)
- 不要儲存過大的內容(傳輸效率)
- 不要儲存過多的條目(傳輸效率)
- 設定合理的domian、path,減少不必要的Cookie傳輸(傳輸效率)
- 不要儲存非Unicode字元(可用性)
- 不要儲存不可恢複的資訊(可靠性)