1. 什么是Cookie?
- 服務器通過 Set-Cookie 頭給客戶端一串字符串
- 客戶端每次訪問相同域名的網頁時,必須帶上這段字符串
- 客戶端要在一段時間內保存這個Cookie
- Cookie 默認在用戶關閉頁面后就失效,后台代碼可以任意設置 Cookie 的過期時間
- 大小大概在 4kb 以內
2. cookie的設置獲取和刪除
cookie是運行在客戶端的,可以用JS來設置cookie.
首先需要稍微了解一下cookie的結構,簡單地說:cookie是以鍵值對的形式保存的,即key=value的格式。各個cookie之間一般是以“;”分隔。
- JS設置cookie:
document.cookie="name="+username;
- JS讀取cookie:
var getCookie = function (name) { var arr; var reg = new RegExp("(^| )" + name + "=([^;]*)(;|$)"); if (arr = document.cookie.match(reg)) return unescape(arr[2]); else
return null; };
- JS刪除cookie:
var delCookie = function (name) { setCookie(name, ' ', -1); };
3. cookie的主要作用:
- 會話狀態管理(如用戶登錄狀態、購物車、游戲分數和其它需要記錄的信息)
- 個性化設置(如用戶自定義設置、主題等)
- 瀏覽器行為跟蹤(如跟蹤分析用戶行為)
4. cookie設置語法:
document.cookie = "cookieName=mader; expires=Fri, 31 Dec 2017 15:59:59 GMT; path=/mydir; domain=cnblogs.com; max-age=3600; secure=true";
- cookieName=mader :name=value,cookie的名稱和值
- expires=Fri, 31 Dec 2017 15:59:59 GMT: expires,cookie過期的日期,如果沒有定義,cookie會在對話結束時過期。日期格式為 new Date().toUTCString()
- path=/mydir: path=path (例如 '/', '/mydir') 如果沒有定義,默認為當前文檔位置的路徑。
- domain=cnblogs.com: 指定域 (包括所有子域名)
- max-age=3600: 文檔被查看后cookie過期時間,單位為秒
- secure=true: cookie只會被https傳輸 ,即加密的https鏈接傳輸
5. 相關問題:
我在 Chrome 登錄了得到 Cookie,用 Safari 訪問,Safari 會帶上 Cookie 嗎?
不會,因為瀏覽器會帶上域名Cookie, Cookie 還可以根據路徑做限制
Cookie 存在哪?
Windows 存在 C 盤的一個文件里
Cookie會被用戶篡改嗎?
可以,可以用Session 來解決這個問題,防止用戶篡改
Cookie 有效期嗎?
默認有效期20分鍾左右,不同瀏覽器策略不同
后端可以強制設置有效期,具體語法看 MDN
Cookie 遵守同源策略嗎?
也有,不過跟 AJAX 的同源策略稍微有些不同。
當請求 qq.com 下的資源時,瀏覽器會默認帶上 qq.com 對應的 Cookie,不會帶上 baidu.com 對應的 Cookie
當請求 v.qq.com 下的資源時,瀏覽器不僅會帶上 v.qq.com 的Cookie,還會帶上 qq.com 的 Cookie