/**
* 設(shè)置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高級程序設(shè)計(jì)上說:大小4095B內(nèi),包括名 值 和 ‘’=‘’ ,個數(shù)20個內(nèi)(很多都支持大于20個了)?!俺叽缦拗朴绊懙揭粋€域下所有的cookie,而并非每個cookie單獨(dú)限制?!?一開始以為是這個域名下所有的cookie大小不能超過4095B,后來測試后才發(fā)現(xiàn)是對每一個cookie的限制,我可以存多個4kb的cookie;不知道那句話是表達(dá)問題還是真的有問題。
- 還需要注意的是所有的cookie都會由瀏覽器作為請求頭發(fā)送,cokie信息越大,完成對服務(wù)器請求的時間也就越長,最好是盡可能少存信息,一定不要存重要和敏感的數(shù)據(jù);
- 可以用JSON.stringify()和JSON.parse() 來存多個鍵值對
- 通過path來設(shè)置可操作該cookie的路徑,設(shè)置為path=/ 則該域名下的都可以操作
- 所有的名字和值通過encodeURIComponent()來進(jìn)行URL編碼和decodeURIComponent()來解碼;不轉(zhuǎn)碼的話,如果有漢字或需要轉(zhuǎn)碼的字符則會報(bào)錯503 頁面顯示EOF,應(yīng)該就是在RequestHeaderd的Cookie字段有問題;經(jīng)測試漢字如果不通過URL編碼的話,存在cookie的里面是亂碼,但是取出來用又是正常的;編碼后還會增加存儲空間,如"哈"==>"%E5%93%88",2個字節(jié)到要用9個字節(jié)了,有一些符號也會轉(zhuǎn)如 " ;等
- 漢字是2個字節(jié),字母符號數(shù)字是1個字節(jié);如果存的全部都是URL編碼后的漢字,最好不要超過450個漢字,包括名和值;超過的就不存了
- 安全標(biāo)志 secure ;則只能在https下的請求才發(fā)送cookie
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。