數(shù)據(jù)存儲之cookie的屬性及js對cookie的讀取肖粮、寫入和刪除操作
上一篇介紹為cookie的原理及一些限制之后,本篇文章主要介紹如何操作cookie尔苦,所以比較實用涩馆。
cookie的六大主要屬性
name(名稱),cookie 名稱是不區(qū)分大小寫的允坚,且必須經(jīng)過URL編碼
value(值)魂那,同樣必須經(jīng)過URL編碼
-
domain (域) cookie對于哪個域是有效的。這個域可以包含子域(subdomain)稠项。子域名涯雅,是頂級域名(一級域名或父域名)的下一級,域名整體包括兩個“.”或包括一個“.”和一個“/”展运。
要想cookie在多個二級域名中共享活逆,需要設置domain為頂級域名,這樣就可以在所有二級域名里面或者到這個cookie的值了拗胜。(關于頂級域名蔗候,二級域名,三級域名的區(qū)別如下圖簡要所示)埂软,cookie無法設置除當前域名或者其父域名之外的其他domain. 包括子域名锈遥,否則cookie不起作用。不設置時勘畔,domian為當前域名所灸。 path (路徑) 對于指定域中的那個路徑,應該向服務器發(fā)送 cookie炫七。比如我們只想讓/head/info這個域名才能訪問這個cookie爬立,那我們的domain 就要設置為 /head/info ,而域名為 /head 就不能訪問到這個cookie 了诉字。
expires/Max-Age(超時時間)懦尝,表示 cookie 何時應該被刪除的時間戳。
secure(安全標志)壤圃,指定后陵霉,cookie 只有在使用** SSL 連接**的時候才發(fā)送到服務器。
js對cookie的讀取伍绳、寫入和刪除操作
js對cookie的操作只有一個接口就是document.cookie踊挠。JavaScript 可以使用 document.cookie 屬性來創(chuàng)建 、讀取冲杀、及刪除 cookie效床。當用來獲取屬性值時,
document.cookie 返回當前頁面可用的(根據(jù) cookie 的域权谁、路徑剩檀、失效時間和安全設置)所有 cookie的字符串,一系列由分號隔開的名值對兒旺芽。這對于我們獲取指定name的cookie的值極為不便沪猴。而當我們想設置cookie的時候必須得給name和value加上 encodeURIComponent 然后再用字符串將所有的屬性拼接好,極為丑陋采章。所以
下面的函數(shù)可以簡化這些功能运嗜。
var CookieUtil = {
get: function (name){
var cookieName = encodeURIComponent(name) + "=",
cookieStart = document.cookie.indexOf(cookieName),
cookieValue = null;
if (cookieStart > -1){
var cookieEnd = document.cookie.indexOf(";", cookieStart);
if (cookieEnd == -1){
cookieEnd = document.cookie.length;
}
cookieValue = decodeURIComponent(document.cookie.substring(cookieStart
+ cookieName.length, cookieEnd));
}
return cookieValue;
},
set: function (name, value, expires, path, domain, secure) {
var cookieText = encodeURIComponent(name) + "=" +
encodeURIComponent(value);
if (expires instanceof Date) {
cookieText += "; expires=" + expires.toGMTString();
}
if (path) {
cookieText += "; path=" + path;
}
if (domain) {
cookieText += "; domain=" + domain;
}
if (secure) {
cookieText += "; secure";
}
document.cookie = cookieText;
},
unset: function (name, path, domain, secure){
this.set(name, "", new Date(0), path, domain, secure);
}
};