cookie的屬性
expires 生存期
預設:會話期間存在(使用者關閉瀏覽器後,cookie值被銷毀)
其他:日期格式規範為GMT(或UCT)"Weekday, DD-Mon-YYYY HH:MM:SS GMT" 解決方案是使用Date對象。
path 可訪問的路徑
預設:建立該cookie值的網頁路徑(cookie只能被同在目前的目錄中的其他頁面,或者目前的目錄的子目錄中的頁面訪問)
其他:可以將path設定為“/”以使整個伺服器域都可訪問這個cookie成員
domain 可訪問域
預設:當前域
其他:不同子域間將不能相互訪問
secure 安全性(指定了在網路上傳輸cookie值的方式)
預設:false
其他:false - 普通的、不安全的http串連;true - https或其他安全性通訊協定
日期格式擷取執行個體
var nextyear = new Date();
nextyear.setFullYear(nextyear.getFullYear() + 1);
expiretime = nextyear.toGMTString();
一個簡單的封裝實現
// 有關cookie的操作
function Cookie() {};
// 設定cookie值
// 參數:cookie名,值,生存天數,生存小時數
Cookie.setCookie = function(name, value, days, hours) {
// 如果沒有傳入生存期,則預設為0天2小時
days = days || 0;
hours = hours || 2;
var expTime = new Date();
expTime.setDate(expTime.getDate() + days);
expTime.setHours(expTime.getHours() + hours);
document.cookie = escape(name) + "=" + escape(value) +
";" + "expires=" + expTime.toGMTString();
};
// 擷取某個cookie值
// 返回:cookie值或undefined
Cookie.getCookie = function(name) {
var rs = document.cookie.match(
new RegExp("(?:^| )" + escape(name) + "=([^;]*)(?:;|$)", "i")
);
return rs ? unescape(r[1]) : undefined;
};
// 刪除某個cookie值
Cookie.deleteCookie = function(name) {
document.cookie = escape(name) + "=;expires=" + new Date().toGMTString();
};
// 清除全部cookie
Cookie.clearCookie = function() {
// 擷取到期時間字串
var expStr = new Date().toGMTString();
// 擷取當前可訪問cookie中的所有name值
var rs = document.cookie.match(
new RegExp("([^ ;][^;]*)(?=(=[^;]*)(;|$))", "gi")
);
// 刪除所有cookie
for (var i in rs)
document.cookie = rs[i] + "=;expires=" + expStr;
};
Cookie.setSubCookie = function(name, subName, value) {
};
Cookie.getSubCookie = function(name, subName) {
};
Cookie.setFullCookie = function(name, value, expTime, path, domain, secure) {
};
其他筆記
cookie是一個單例對象。
cookie值不能含有分號、逗號或空白符,當有這些特殊字元出現時,可以用JavaScript提供的escape函數先對它進行編碼(unescape解碼)。
瀏覽器儲存的cookie總數不能超過300個(注意cookie是單例),為每個Web伺服器儲存的cookie數不能超過20個(突破20:麵包屑技術,通常使用冒號作為子cookie分割符),每個cookie儲存的資料不能超過4KB(解決方案:另一種稍微強的指令碼化資料存放區機制-userData)