/**
* 設置cookie
* @param {string} name 鍵名
* @param {string} value 鍵值
* @param {integer} days cookie周期
*/
function setCookie(name, value, days) {
if(days) {
var date = new Date();
date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
var expires = "; expires=" + date.toGMTString();
} else {
var expires = "";
}
document.cookie = encodeURIComponent(name) + "=" + encodeURIComponent(value) + expires + "; path=/";
}
// 獲取cookie
function getCookie(name) {
var nameEQ = encodeURIComponent(name) + "=";
var ca = document.cookie.split(';');
for(var i = 0; i < ca.length; i++) {
var c = ca[i];
while(c.charAt(0) == ' ') c = c.substring(1, c.length);
if(c.indexOf(nameEQ) == 0) return decodeURIComponent(c.substring(nameEQ.length, c.length));
}
return null;
}
// 刪除cookie
function deleteCookie(name) {
setCookie(name, "", -1);
}
- js高級程序設計上說:大小4095B內,包括名 值 和 ‘’=‘’ ,個數20個內(很多都支持大于20個了)。“尺寸限制影響到一個域下所有的cookie,而并非每個cookie單獨限制。” 一開始以為是這個域名下所有的cookie大小不能超過4095B,后來測試后才發現是對每一個cookie的限制,我可以存多個4kb的cookie;不知道那句話是表達問題還是真的有問題。
- 還需要注意的是所有的cookie都會由瀏覽器作為請求頭發送,cokie信息越大,完成對服務器請求的時間也就越長,最好是盡可能少存信息,一定不要存重要和敏感的數據;
- 可以用JSON.stringify()和JSON.parse() 來存多個鍵值對
- 通過path來設置可操作該cookie的路徑,設置為path=/ 則該域名下的都可以操作
- 所有的名字和值通過encodeURIComponent()來進行URL編碼和decodeURIComponent()來解碼;不轉碼的話,如果有漢字或需要轉碼的字符則會報錯503 頁面顯示EOF,應該就是在RequestHeaderd的Cookie字段有問題;經測試漢字如果不通過URL編碼的話,存在cookie的里面是亂碼,但是取出來用又是正常的;編碼后還會增加存儲空間,如"哈"==>"%E5%93%88",2個字節到要用9個字節了,有一些符號也會轉如 " ;等
- 漢字是2個字節,字母符號數字是1個字節;如果存的全部都是URL編碼后的漢字,最好不要超過450個漢字,包括名和值;超過的就不存了
- 安全標志 secure ;則只能在https下的請求才發送cookie
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。