Cookie
Cookie 是直接存储在浏览器中的一小串数据。它们是 HTTP 协议的一部分,由 RFC 6265 规范定义。
Cookie 通常是由 Web 服务器使用响应 Set-Cookie
HTTP-header 设置的。然后浏览器使用 Cookie
HTTP-header 将它们自动添加到(几乎)每个对相同域的请求中。
最常见的用处之一就是身份验证:
- 登录后,服务器在响应中使用
Set-Cookie
HTTP-header 来设置具有唯一“会话标识符(session identifier)”的 cookie。 - 下次如果请求是由相同域发起的,浏览器会使用
Cookie
HTTP-header 通过网络发送 cookie。 - 所以服务器知道是谁发起了请求。
特点:
1.按照域名来存储的
不同的域名下的cookie数据不共通。
2.有存储的路径
127.0.0.1:8080/a/b.html cookie /a/b /
127.0.0.1:8080/b/b.html cookie /b/b
3.cookie 存储的数据格式
"键1=值1;键2=值2"
4.存储大小
4KB 50条左右
5.时效性:
默认是会话级别
我们可以手动设置cookie的过期时间
写入 document.cookie
我们可以写入 document.cookie
。但这不是一个数据属性,它是一个访问器(getter/setter)。对其的赋值操作会被特殊处理。
对 document.cookie
的写入操作只会更新其中提到的 cookie,而不会涉及其他 cookie。
例如,此调用设置了一个名称为 user
且值为 yasuo的 cookie:
document.cookie = "user=yasuo"; // 只会更新名称为 user 的 cookie
alert(document.cookie); // 展示所有 cookie
如果你运行了上面这段代码,你会看到多个 cookie。这是因为 document.cookie=
操作不是重写整所有 cookie。它只设置代码中提到的 cookie user
。
获取Cookie中相应键对应的值
document.cookie
的值由 name=value
对组成,以 ;
分隔。每一个都是独立的 cookie。
有两种获取方法:
1、通过分割字符串
2、通过indexof检索、和substring截取字符串
1、截取字符串
// key 键
function getCookie(key) {
if (document.cookie.length > 0) {
// 字符串按照分号分割,得到数组
var arr = document.cookie.split(";");
for (var i = 0; i < arr.length; i++) {
// trim:删除空格,按照等号分割,得到[键,名]的数组
var t = arr[i].trim().split("=");
// 判断键是否相等,返回相应的值
if (t[0] === key) {
return t[1];
}
}
}
return "";
}
2、检索截取
function getCookie(key) {
console.log(document.cookie);
if (document.cookie.length > 0) {
var s = document.cookie.indexOf(key + "=");
// 判断是否为第一个
if (s == 0) {
var start = document.cookie.indexOf(key + "=");
// 判断是否查找到
if (start != -1) {
var end = document.cookie.indexOf(";", start);
// 判断是否为最后一个
if (end == -1) {
return end = document.cookie.length;
}
// 获取值
return document.cookie.substring(start + key.length + 1, end);
}
} else {
// 查询的键不是第一个,这通过"; "//防止usename和name这样的键 + key + "="//防止names和name这样的键,获取下标;
var start = document.cookie.indexOf("; " + key + "=") + 2;
// 判断是否检索到
if (start != 1) {
// 从键开下标检索,到下一个分号;的到键对应值结束的下标
var end = document.cookie.indexOf(";", start);
if (end == -1) {
end = document.cookie.length;
}
console.log(start);
// 截取键长度加等号之后的值
return document.cookie.substring(start + key.length + 1, end);
}
}
}
return "";
}