数据存储之cookie的属性及js对cookie的读取、写入和删除操作
上一篇介绍为cookie的原理及一些限制之后,本篇文章主要介绍如何操作cookie,所以比较实用。
cookie的六大主要属性
name(名称),cookie 名称是不区分大小写的,且必须经过URL编码
value(值),同样必须经过URL编码
-
domain (域) cookie对于哪个域是有效的。这个域可以包含子域(subdomain)。子域名,是顶级域名(一级域名或父域名)的下一级,域名整体包括两个“.”或包括一个“.”和一个“/”。
要想cookie在多个二级域名中共享,需要设置domain为顶级域名,这样就可以在所有二级域名里面或者到这个cookie的值了。(关于顶级域名,二级域名,三级域名的区别如下图简要所示),cookie无法设置除当前域名或者其父域名之外的其他domain. 包括子域名,否则cookie不起作用。不设置时,domian为当前域名。 path (路径) 对于指定域中的那个路径,应该向服务器发送 cookie。比如我们只想让/head/info这个域名才能访问这个cookie,那我们的domain 就要设置为 /head/info ,而域名为 /head 就不能访问到这个cookie 了。
expires/Max-Age(超时时间),表示 cookie 何时应该被删除的时间戳。
secure(安全标志),指定后,cookie 只有在使用** SSL 连接**的时候才发送到服务器。
js对cookie的读取、写入和删除操作
js对cookie的操作只有一个接口就是document.cookie。JavaScript 可以使用 document.cookie 属性来创建 、读取、及删除 cookie。当用来获取属性值时,
document.cookie 返回当前页面可用的(根据 cookie 的域、路径、失效时间和安全设置)所有 cookie的字符串,一系列由分号隔开的名值对儿。这对于我们获取指定name的cookie的值极为不便。而当我们想设置cookie的时候必须得给name和value加上 encodeURIComponent 然后再用字符串将所有的属性拼接好,极为丑陋。所以
下面的函数可以简化这些功能。
var CookieUtil = {
get: function (name){
var cookieName = encodeURIComponent(name) + "=",
cookieStart = document.cookie.indexOf(cookieName),
cookieValue = null;
if (cookieStart > -1){
var cookieEnd = document.cookie.indexOf(";", cookieStart);
if (cookieEnd == -1){
cookieEnd = document.cookie.length;
}
cookieValue = decodeURIComponent(document.cookie.substring(cookieStart
+ cookieName.length, cookieEnd));
}
return cookieValue;
},
set: function (name, value, expires, path, domain, secure) {
var cookieText = encodeURIComponent(name) + "=" +
encodeURIComponent(value);
if (expires instanceof Date) {
cookieText += "; expires=" + expires.toGMTString();
}
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, "", new Date(0), path, domain, secure);
}
};