/**
* 设置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
网友评论