Cookie
HTTP协议本身是无状态的。即服务器无法判断用户身份。
Cookie实际上是一小段的文本信息(key-value格式),是某些网站为了辨别用户身份,进行Session跟踪而储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息
Cookie是一段不超过4KB的小型文本数据,由一个名称(Name)、一个值(Value)和其它几个用于控制Cookie有效期、安全性、使用范围的可选属性组成
用于:
会话状态管理(如用户登录状态、购物车、游戏分数或其它需要记录的信息)
个性化设置(如用户自定义设置、主题等)
浏览器行为跟踪(如跟踪分析用户行为等)
创建
cookie是一个个键值对(“键=值”的形式)加上分号空格隔开组合而成
/**
2 * 设置cookie
3 * @param name cookie的名称
4 * @param value cookie的值
5 * @param day cookie的过期时间
6 */
7 var setCookie = function (name, value, day) {
8 if(day !== 0){ //当设置的时间等于0时,不设置expires属性,cookie在浏览器关闭后删除
9 var expires = day * 24 * 60 * 60 * 1000;
10 var date = new Date(+new Date()+expires);
11 document.cookie = name + "=" + escape(value) + ";expires=" + date.toUTCString();
12 }else{
13 document.cookie = name + "=" + escape(value);
14 }
15 };
注意:expires使用GMT或UTC格式的时间, 我这里没有指定路径(path)和域(domain), 当没有指定路径时默认为当前路径下,如对 于“https://home.cnblogs.com/u/maderlzp/”下设置的cookie,其path为"/u/maderlzp", 其domain为当前域名“home.cnblogs.com”。
为什么有时候删除不了cookie? 可能是因为删除cookie时没有指定该cookie的path和domain,导致找不到这个cookie来设置过期时间而无法删除。
获取cookie:
/**
2 * 获取对应名称的cookie
3 * @param name cookie的名称
4 * @returns {null} 不存在时,返回null
5 */
6 var getCookie = function (name) {
7 var arr;
8 var reg = new RegExp("(^| )" + name + "=([^;]*)(;|$)");
// "(^| )" + name + "=([^;]*)(;|$)" (^| )匹配cookie开头或空格(cookie键值对之间用分号空格隔开),也就是cookie键值对的开始。接着是cookie的名称name,([^;]*)匹配除分号以外的任意字符,也就是cookie键值对的值。最后(;|$)匹配分号或整个cookie的结尾,也就是cooke键值对的结尾。
9 if (arr = document.cookie.match(reg))
10 return unescape(arr[2]);
11 else
12 return null;
13 };
删除cookie:
设置要删除的cookie的expires为过去的时间即可
/**
* 删除cookie
* @param name cookie的名称
*/
var delCookie = function (name) {
setCookie(name, ' ', -1);
};
修改cookie:
使用上面设置cookie的方法,重新给要修改的cookie赋值就行,这样旧的就会被覆盖掉
定义 Cookie 的生命周期
Cookie 的生命周期可以通过两种方式定义:
会话期 Cookie 是最简单的 Cookie:浏览器关闭之后它会被自动删除,也就是说它仅在会话期内有效。会话期Cookie不需要指定过期时间(Expires)或者有效期(Max-Age)。需要注意的是,有些浏览器提供了会话恢复功能,这种情况下即使关闭了浏览器,会话期Cookie 也会被保留下来,就好像浏览器从来没有关闭一样,这会导致 Cookie 的生命周期无限期延长。
持久性 Cookie 的生命周期取决于过期时间(Expires)或有效期(Max-Age)指定的一段时间。
提示:当Cookie的过期时间被设定时,设定的日期和时间只与客户端相关,而不是服务端。
摘自博客园–浮生若梦