在操作cookie之前,先來看一下cookie長什么樣。

可以看到,cookie是一個個鍵值對(“鍵=值”的形式)加上分號空格隔開組合而成, 形如: "name1=value1; name2=value2; name3=value3"
設置cookie:
1 /**
2 * 設置cookie
3 * @param name cookie的名稱
4 * @param value cookie的值
5 * @param day cookie的過期時間
6 */
7 var setCookie = function (name, value, day) {
8 if(day !== 0){ //當設置的時間等於0時,不設置expires屬性,cookie在瀏覽器關閉后刪除
9 var expires = day * 24 * 60 * 60 * 1000;
10 var date = new Date(+new Date()+expires);
11 document.cookie = name + "=" + escape(value) + ";expires=" + date.toUTCString();
12 }else{
13 document.cookie = name + "=" + escape(value);
14 }
15 };
注意:expires使用GMT或UTC格式的時間, 我這里沒有指定路徑(path)和域(domain), 當沒有指定路徑時默認為當前路徑下,如對 於“https://home.cnblogs.com/u/maderlzp/”下設置的cookie,其path為"/u/maderlzp", 其domain為當前域名“home.cnblogs.com”。
為什么有時候刪除不了cookie? 可能是因為刪除cookie時沒有指定該cookie的path和domain,導致找不到這個cookie來設置過期時間而無法刪除。
獲取cookie:
/**
* 獲取對應名稱的cookie
* @param name cookie的名稱
* @returns {null} 不存在時,返回null
*/
var getCookie = function (name) {
var arr;
var reg = new RegExp("(^| )" + name + "=([^;]*)(;|$)");
if (arr = document.cookie.match(reg))
return unescape(arr[2]);
else
return null;
};
cookie獲取正則解析:
"(^| )" + name + "=([^;]*)(;|$)" (^| )匹配cookie開頭或空格(cookie鍵值對之間用分號空格隔開),也就是cookie鍵值對的開始。接着是cookie的名稱name,([^;]*)匹配除分號以外的任意字符,也就是cookie鍵值對的值。最后(;|$)匹配分號或整個cookie的結尾,也就是cooke鍵值對的結尾。
更多正則的語法詳解請參考:
正則表達式的用法和常用實例【1】
刪除cookie:
1 /**
2 * 刪除cookie
3 * @param name cookie的名稱
4 */
5 var delCookie = function (name) {
6 setCookie(name, ' ', -1);
7 };
設置要刪除的cookie的expires為過去的時間即可
修改cookie:
使用上面設置cookie的方法,重新給要修改的cookie賦值就行,這樣舊的就會被覆蓋掉
cookie的主要作用:
Cookie主要用在以下三個方面:
- 會話狀態管理(如用戶登錄狀態、購物車、游戲分數和其它需要記錄的信息)
- 個性化設置(如用戶自定義設置、主題等)
- 瀏覽器行為跟蹤(如跟蹤分析用戶行為)
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: 指定域(例如 'example.com', '.example.com' (包括所有子域名), 'subdomain.example.com') 如果沒有定義,默認為當前文檔位置的路徑的域名部分。
- max-age=3600: 文檔被查看后cookie過期時間,單位為秒
- secure=true: cookie只會被https傳輸 ,即加密的https鏈接傳輸
彼岸花開開彼岸, 奈何橋前可奈何。 望鄉台下忘川水, 三生石邊賣孟婆。 涅槃同魔魔戀相, 浮生若夢夢蹉跎。 唯有余生舞日月, 白駒過隙大風歌。

