Cookie 字符串
document.cookie
屬性看起來像一個正常的文本字符串,但它並不是。即使你向 document.cookie 寫一份完整的 cookie 字符串,當再次讀取時,你只能看到它的名稱-值對。
通過js讀取document.cookie的值就像這樣:
cookieKey1=value; cookieKey2=value
比如一個實際的document.cookie例子:
account=admin; ssid=0e20962dd7cb402011ae3909648819ca
js所有對cookie的操作其實都是通過對document.cookie
進行操作實現的;而且只能對當前domain的cookie進行操作,無法跨domain操作。
讀取 cookie 的函數
讀取cookie的函數只能獲取指定cookie的value值,無法獲取像超時時間和path等這樣的信息,讀取cookie的函數代碼如下:
function getCookie(cname) {
var name = cname + "=";
var decodedCookie = decodeURIComponent(document.cookie);
var ca = decodedCookie.split(';');
for(var i = 0; i <ca.length; i++) {
var c = ca[i];
while (c.charAt(0) == ' ') {
c = c.substring(1);
}
if (c.indexOf(name) == 0) {
return c.substring(name.length, c.length);
}
}
return "";
}
設置 cookie 的函數
cookie有個特性就是如果設置了新 cookie(cookie的name和path都一樣),則舊的 cookie 會被覆蓋掉;否則,新的 Cookie 會被添加到 document.cookie,所以如果你想對cookie進行增加,修改和刪除,都可以通過設置cookie函數實現,設置cookie函數如下:
function setCookie(cname, cvalue, exdays, path) {
var d = new Date();
d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));
var expires = "expires="+d.toUTCString();
document.cookie = cname + "=" + cvalue + ";" + expires + ";path=" + path;
}
注意:
- 新增cookie直接調用該函數即可
- 如果新增的cookie的名稱和path已經存在,則會覆蓋已有的cookie,即是對cookie進行修改
- 如果想刪除cookie,則通過該函數設置指定的cookie的超時時間爲當前或者已過去的時間即可。比如,刪除一個名爲 ssid,path爲 /sbs 的cookie
setCookie('ssid', '', 0, '/sbs');