转载处:聂微东大神的cookie博文
博文如有不妥,请赐教 (本人前端小菜鸡一枚);
定义(w3c)
cookie 是存储于访问者的计算机中的变量。每当同一台计算机通过浏览器请求某个页面时,就会发送这个 cookie。你可以使用 JavaScript 来创建和取回 cookie 的值
设置和获取
-
设置 (特殊情况下的编码问题)
在设置方面很简单document.cookie = "name=strong";
就这样一个简单的句子就设定了一个cookie 键值对但是当给cookie设置一个有特殊字符的复杂值时,又涉及到了编码问题。
var a = "stron;g";
document.cookie = "name="+a;
document.cookie = "name1=" + escape(a);
可以看到,通过编码成功地将特殊字符 ';' 写进了cookie
-
获取
document.cookie是一段字符串,这就给获取添加了一定的难度
我认为最简单的获取方式是通过 正则表达式,但是这有一个前提,你要回正则表达式
每一次写正则表达式都是一脸懵逼,最后还是网上down了一个函数
function getCookie(name)
{
var arr,reg=new RegExp("(^| )"+name+"=([^;]*)(;|$)");
if(arr=document.cookie.match(reg)){
return unescape(arr[2]);
}
else
return null;
}
document.cookie="name=strong";
console.log(getCookie(name)) //strong
**当然也要注意当使用编码函数对特殊字符编码时,获取时要进行解码**
一些其他属性
有效期
w3c上面经典的代码:
function setCookie(c_name, value, expiredays){
var exdate=new Date();
exdate.setDate(exdate.getDate() + expiredays);
document.cookie=c_name+ "=" + escape(value) + ((expiredays==null) ? ""
: ";expires="+exdate.toGMTString());
}
使用方法:setCookie('username','Darren',30);
在上面的代码中,设置的时间是以 '天' 来为单位的,
exdate.setHours(exdate.getHours() + expiredays);这样就是一小时计算,当然
参数中的expiredays也就是期望的小时数。
路径
一.cookie 路径概念
在基础知识中有提到 cookie 有域和路径的概念,现在来介绍路径在 cookie 中的作用。
cookie 一般都是由于用户访问页面而被创建的,可是并不是只有在创建 cookie 的页面才可以访问这个 cookie。
默认情况下,只有与创建 cookie 的页面在同一个目录或子目录下的网页才可以访问,这个是因为安全方面的考虑,造成不是所有页面都可以随意访问其他页面创建的 cookie。举个例子:
在 "http://www.cnblogs.com/Darren_code/" 这个页面创建一个cookie,那么在"/Darren_code/"这个路径下的页面如: "http://www.cnblogs.com/Darren_code/archive/2011/11/07/Cookie.html"这个页面默认就能取到cookie信息。
可在默认情况下, "http://www.cnblogs.com"或者 "http://www.cnblogs.com/xxxx/" 就不可以访问这个 cookie(光看没用,实践出真理_)。
那么如何让这个 cookie 能被其他目录或者父级的目录访问类,通过设置 cookie 的路径就可以实现。例子如下:
document.cookie = "name=value;path=path"
document.cookie = "name=value;expires=date;path=path"
最常用的例子就是让 cookie 在跟目录下,这样不管是哪个子页面创建的 cookie,所有的页面都可以访问到了:
document.cookie = "name=Darren;path=/"
域
路径能解决在同一个域下访问 cookie 的问题,咱们接着说 cookie 实现同域之间访问的问题。语法如下:
document.cookie = "name=value;path=path;domain=domain"
例如 "www.qq.com" 与 "sports.qq.com" 公用一个关联的域名"qq.com",我们如果想让 "sports.qq.com" 下的cookie被 "www.qq.com" 访问,我们就需要用到 cookie 的domain属性,并且需要把path属性设置为 "/"。例:
document.cookie = "username=Darren;path=/;domain=qq.com"
注:一定的是同域之间的访问,不能把domain的值设置成非主域的域名。