cookie最初是在客户端用于存储会话信息的,保存在客户端的。会在浏览器关闭之后被删除。可以以Set-Cookie作为响应头的一部分,也可以以cookie作为请求头的一部分。
限制:
- 要求每条cookie的大小是由限制的,根据不同的浏览器限制也会不同;
- 每个域名下cookie的数量是有限制的,根据不同的浏览器限制也会不同;
组成:
- 名称:一个唯一确定cookie的名称,不区分大小写;
- 值:存储在cookie中的字符串值。值必须被URI编码;
- 域:cookie对于哪个域好似有效的,所有向该域发送的请求都会包含这个cookie的信息;
- 有效时间:表示cookie在这个事件之后就会被删除;
- 路径:对于指定域中的那个路径;
- 安全标志:指定后,cookei只有在SSL连接下才会发送到服务器;
注意
- 每一段信息都作为Set-Cookie的一部分,使用分号加空格分隔每一段;
- 安全标志secure是cookie中唯一一个非键值对;
- 键值对是必须的;
封装一个简单的cookie库
这里面需要包含对cookie的添加,获取和删除三个基本的操作。
var CookieUtil = {
get:function(name) {
var cookieName = encodeURICompoment(name) + '=',
cookieValue = null,
cookieStart = documnet.cookie.indexOf(cookieName);
if(cookieStart > -1) { // cookie里面存在要获取的name
var cookieEnd = document.cookie.indexOf(';',cookieStart);//找到这个键值对结束的位置
if(cookieEnd > -1) { //如果只有这一个键值对
cookieEnd = document.cookie.length;
}
cookieValue = decodeURICompoment(document.cookie.substring(cookieStart + cookieName.length ,cookieEnd));
}
return cookieValue;
};
set:function(name,value,path,domain,secure,expires){
var cookieText = encodeURICompoment(name) + '=' + encodeURICompoment(value);
if(expires instanceof Date) {
cookieText += '; expires=' + expires.toString();
}
if(path) {
cookieText += '; path=' + path;
}
if(domain) {
cookieText += '; domain=' + domain;
}
if(secure) {
cookieText += '; secure';
}
document.cookie = cookieText;
};
unset:function(name,path,domain,secure) {
this.set(name,'',path,domain,secure,new Date(0));
}
}