1. 什么是Cookie裂七?
- 服務(wù)器通過 Set-Cookie 頭給客戶端一串字符串
- 客戶端每次訪問相同域名的網(wǎng)頁時腹暖,必須帶上這段字符串
- 客戶端要在一段時間內(nèi)保存這個Cookie
- Cookie 默認在用戶關(guān)閉頁面后就失效蝶棋,后臺代碼可以任意設(shè)置 Cookie 的過期時間
- 大小大概在 4kb 以內(nèi)
2. cookie的設(shè)置獲取和刪除
cookie是運行在客戶端的,可以用JS來設(shè)置cookie.
首先需要稍微了解一下cookie的結(jié)構(gòu),簡單地說:cookie是以鍵值對的形式保存的同仆,即key=value的格式。各個cookie之間一般是以“;”分隔裙品。
- JS設(shè)置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的主要作用:
- 會話狀態(tài)管理(如用戶登錄狀態(tài)乓梨、購物車、游戲分數(shù)和其它需要記錄的信息)
- 個性化設(shè)置(如用戶自定義設(shè)置清酥、主題等)
- 瀏覽器行為跟蹤(如跟蹤分析用戶行為)
4. cookie設(shè)置語法:
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會在對話結(jié)束時過期。日期格式為 new Date().toUTCString()
- path=/mydir: path=path (例如 '/', '/mydir') 如果沒有定義辱志,默認為當前文檔位置的路徑蝠筑。
- domain=cnblogs.com: 指定域 (包括所有子域名)
- max-age=3600: 文檔被查看后cookie過期時間,單位為秒
- secure=true: cookie只會被https傳輸 揩懒,即加密的https鏈接傳輸
5. 相關(guān)問題:
我在 Chrome 登錄了得到 Cookie什乙,用 Safari 訪問,Safari 會帶上 Cookie 嗎
不會已球,因為瀏覽器會帶上域名Cookie臣镣, Cookie 還可以根據(jù)路徑做限制
Cookie 存在哪?
Windows 存在 C 盤的一個文件里
Cookie會被用戶篡改嗎辅愿?
可以,可以用Session 來解決這個問題忆某,防止用戶篡改
Cookie 有效期嗎点待?
默認有效期20分鐘左右,不同瀏覽器策略不同
后端可以強制設(shè)置有效期弃舒,具體語法看 MDN
Cookie 遵守同源策略嗎癞埠?
也有,不過跟 AJAX 的同源策略稍微有些不同聋呢。
當請求 qq.com 下的資源時苗踪,瀏覽器會默認帶上 qq.com 對應(yīng)的 Cookie,不會帶上 baidu.com 對應(yīng)的 Cookie
當請求 v.qq.com 下的資源時削锰,瀏覽器不僅會帶上 v.qq.com 的Cookie通铲,還會帶上 qq.com 的 Cookie