本文详细解析JavaScript中document.cookie的用法,涵盖Cookie的基本概念、设置与读取方法。通过addCookie、getCookie和deleteCookie三个核心函数,演示如何创建、获取指定名称及删除Cookie。重点讲解path参数对Cookie访问目录的控制,以及使用toUTCString()处理过期时间的最佳实践,帮助开发者规范操作Cookie。
Cookie基本概念
什么是Cookie?
Cookie是存储在用户计算机中的变量。每当同一台计算机通过浏览器请求某个页面时,该Cookie便会随之发送。开发者可以使用JavaScript来创建和读取Cookie的值。
设置Cookie的方法
设置Cookie
每个Cookie本质上都是一个名/值对,你可以将如下所示的字符串赋值给document.cookie:
document.cookie="userId=828";
虽然document.cookie看起来像是一个普通属性,可以赋予不同的值,但它的行为与常规属性不同。改变其赋值并不会覆盖原有的Cookie,例如连续执行以下两条语句:
document.cookie="userId=828";
document.cookie="userName=hulk";
此时,浏览器将维护两个独立的Cookie,分别为userId和userName。因此,给document.cookie赋值的行为更接近于执行类似以下的语句:
document.addCookie("userId=828");
document.addCookie("userName=hulk");
实际上,浏览器正是按照这种机制来设置Cookie的。若要修改某个Cookie的值,只需重新为其赋值即可,例如:
document.cookie="userId=929";
这样便将名为userId的Cookie值更新为了929。
获取Cookie的值
获取Cookie的值
接下来介绍如何获取Cookie的值。可以直接通过document.cookie来获取:
var strCookie=document.cookie;
这将返回一个由分号隔开的多个名/值对组成的字符串,其中包含了该域名下的所有Cookie。例如:
document.cookie="userId=828";
document.cookie="userName=hulk";
var strCookie=document.cookie;
console.log(strCookie); //userId=828; userName=hulk
当然,这需要在具体的运行环境下执行,因为它是针对当前域名下的Cookie进行获取。
由此可见,document.cookie只能一次性获取所有Cookie的值,而无法直接指定Cookie名称来获取特定值,这正是处理Cookie值时最繁琐的部分。
用户必须自行分析该字符串,以提取指定的Cookie值。例如,要获取userId的值,可以按以下方式实现:
document.cookie="userId=828";
document.cookie="userName=hulk";
var strCookie=document.cookie;
console.log(strCookie); //userId=828; userName=hulk
function getdescookie(strcookie,matchcookie){
var getMatchCookie;
var arrCookie=strcookie.split(";");
for(var i=0;i<arrCookie.length;i++){
var arr=arrCookie[i].split("=");
if(matchcookie == arr[0]){
getMatchCookie = arr[1];
break;
}
}
return getMatchCookie;
}
var resultCookie = getdescookie(strCookie,'userId');
console.log(resultCookie); //828
这样即可得到单个Cookie的值。
控制Cookie的访问目录
如果在某个页面创建了一个Cookie,那么该页面所在目录中的其他页面也可以访问
该Cookie。如果该目录下还有子目录,则在子目录中同样可以访问。
例如,在www.xxxx.com/html/a.html中创建的Cookie,可以被www.xxxx.com/html/b.html或www.xxx.com/html/some/c.html访问,但不能被www.xxxx.com/d.html访问。
为了控制Cookie的可访问目录,需要使用path参数来设置Cookie,语法如下:
document.cookie="name=value; path=cookieDir";
其中cookieDir表示可访问Cookie的目录。
例如:
document.cookie="userId=320; path=/shop";
这表示当前Cookie仅能在shop目录下使用。
如果要使Cookie在整个网站下可用,可以将cookie_dir指定为根目录,例如:
document.cookie="userId=320; path=/";
常用Cookie操作函数实现
常用的Cookie操作及其函数实现
addCookie
addCookie(name,value,expireHours) 该函数接收3个参数:cookie名称,cookie值,以及在多少小时后过期。
function addCookie(name,value,expireHours){
var exdate = new Date();
exdate.setTime(exdate.getTime() + expireHours * 60 * 60 * 1000);
document.cookie = c_name + "=" + escape(value) + ((expireHours == null) ? "" : ";expires=" + exdate.toUTCString());
}
getCookie
获取指定名称的cookie值:getCookie(name)
该函数返回名称为name的cookie值,如果不存在则返回空,其实现如下:
function getCookie(name){
var arr, reg = new RegExp("(^| )" + name + "=([^;]*)(;|$)");
if (arr = document.cookie.match(reg)){
return (arr[2]);
}else{
return null;
}
}
或者不用正则匹配,如下面代码:
function getCookie(name){
var strCookie=document.cookie;
var arrCookie=strCookie.split(";");
for(var i=0;i<arrCookie.length;i++){
var arr=arrCookie[i].split("=");
if(arr[0]==name){
return arr[1];
}
}
return null;
}
deleteCookie
删除指定名称的cookie:deleteCookie(name)
该函数可以删除指定名称的cookie,其实现如下:
function deleteCookie(name){
var exp = new Date();
exp.setTime(exp.getTime() - 1);
document.cookie = name + "=v;expires=" + exp.toUTCString();
}
说明下:这儿我用的toUTCString()方法,看了网上有的用的toGMTString()在格式化时间,但不赞成使用此方法。请使用 toUTCString() 取而代之!!在W3C中看到这句话。
以上这篇基于js中document.cookie全面解析就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持本站。