今天遇到一个需求,需要通过做一个用户登录的功能,并且需要使浏览器可以保存其登录信息,使得用户下次再访问网页的时候无需再次进行登录操作,那么这时就想到使用COOKIEs进行信息保存。
目录
- 一、COOKIE介绍
- 二、设置COOKIE
- 1.简单的COOKIE设置
- 2.带有过期时间的COOKIE设置
- 3.注意
- 三、获取COOKIE
- 四、删除COOKIE
- 五、方法封装
- 1.设置COOKIE
- 2.获取COOKIE
- 3.删除COOKIE
一、COOKIE介绍
1.定义
COOKIE是一种用来在客户端硬盘上存储信息的手段,可以用来存储一些信息,实现一些特殊的效果,例如实现多少天内免登陆,或者存储一些小数据。
2.字段含义
COOKIE中所有的字段设置我们都是通过;去进行分割。
-
key=value(键=值) 就是 COOKIE的一个键值对,一般是根据key拿到对应的value
-
expires(过期时间)设置该COOKIE的过期时间,expires=GMT的时间字符串,例如要7天免登陆,就可以设置过期时间为今天开始的7天之后的日期。如果不设置过期时间,默认浏览器关闭该COOKIE就消失了。
-
path(路径) COOKIE并不是在哪里都能够获取到的。在网站中分为很多目录,可能很多目录中不需要使用到COOKIE,所以可以设置COOKIE的路径,这样更加安全,避免任意目录都能访问到该COOKIE。通过 path=/E:Javascript/test 这样只能在该目录下才能获取到该COOKIE
-
domain(域)默认该COOKIE在该COOKIE所在域名下才能够访问到,但是有时候a.chaijinsong.com需要访问b.chaijinsong.com下的COOKIE,这时候就需要设置domain=chaijinsong.com。这样两个子域名都可以访问该COOKIE
-
secure(安全性) 默认secure是为false的,即通过http协议来传输,但是如果 secure=true 的话,就只能t通过https来进行传输
3.条件
需要注意的是,COOKIE 只有在服务环境下才能设置,所以如果只是自己在本地练习COOKIE的话,可以使用webstorm编辑器, 它内部自带服务环境,如果是使用vscode编辑器的小伙伴,需要去下载Live Server 插件,右击运行时选择【Open with Live Srever】查看效果即可。
二、设置COOKIE
1.简单的COOKIE设置
如下代码所示,设置了一个key为name,value为huanan的COOKIE。
document.COOKIE = "name=huanan";
在浏览器中该COOKIE的具体信息如下:可以看到该COOKIE的到期时间为浏览会话结束时,这是因为我们并未给该COOKIE设置到期时间,所以该COOKIE在会话关闭的时候就会被清除。
2.带有过期时间的COOKIE设置
如下代码所示,设置了一个key为name,value为张三的COOKIE,并且设置了过期时间为5天后。
var exdate = new Date();
exdate.setDate(exdate.getDate() + 5);
document.COOKIE = "name=张三;" + "expires=" + exdate.toGMTString();
在浏览器中该COOKIE的具体信息如下:可以看到该COOKIE的到期时间为创建时间+5天,说明过期时间设置成功。
3.注意
如果要设置多条COOKIE,必须一条条创建,不能批量设置。
document.COOKIE = "name=huanan";
document.COOKIE = "age=19";
三、获取COOKIE
1.查看COOKIE
获取COOKIE前,可以先查看下当前的COOKIE数据。
console.log(document.COOKIE)
控制台打印信息如下:即所有的COOKIE都保存在一个字符串中。
2.获取COOKIE值
通过查看COOKIE值,所知需要获得相应的COOKIE值我们可以通过字符串的一些方法配合使用截取该COOKIE字符串中我们想要的value值。具体代码如下所示:
var name = "age";
var index = document.COOKIE.indexOf(name);
console.log("index", index);
if (index != -1) {
index = index + name.length + 1;
end = document.COOKIE.indexOf(";", index);
if (end == -1) {
end = document.COOKIE.length;
}
var value = unescape(document.COOKIE.substring(index, end));
console.log("vale", value);
} else {
console.log("不存在该COOKIE");
}
四、删除COOKIE
删除COOKIE就比较简单了,我们只需要重新设置改COOKIE的过期时间比当前时间更早即可。
var name = "age";
var date = new Date();
date.setTime(date.getTime() - 10000);
document.COOKIE = name + "=v; expires=" + date.toGMTString();
五、方法封装
1.设置COOKIE
function setCOOKIE(name, value, expiredays) {
var exdate = new Date();
exdate.setDate(exdate.getDate() + expiredays);
document.COOKIE = name + "=" + escape(value) + (expiredays == null ? "" : ";expires=" + exdate.toGMTString());
}
2.获取COOKIE
function getCOOKIE(name) {
var COOKIEs = document.COOKIE;
var COOKIE_pos = COOKIEs.indexOf(name);
if (COOKIE_pos != -1) {
COOKIE_pos = COOKIE_pos + name.length + 1;
var COOKIE_end = COOKIEs.indexOf(";", COOKIE_pos);
if (COOKIE_end == -1) {
COOKIE_end = COOKIEs.length;
}
var value = unescape(COOKIEs.substring(COOKIE_pos, COOKIE_end));
} else {
console.log("不存在该COOKIE");
}
return value;
}
3.删除COOKIE
function delCOOKIE(name) {
var date = new Date();
date.setTime(date.getTime() - 10000);
document.COOKIE = name + "=v; expires=" + date.toGMTString();
}