一、Cookie简介
cookie的内容主要包括:名字、值、过期时间、路径和域。路径与域一起构成cookie的作用范围。若不设置时间,则表示这个cookie的生命期为浏览器会话期间,关闭浏览器窗口,cookie就会消失。这种生命期为浏览器会话期的cookie被称为会话cookie。
会话cookie一般不存储在硬盘而是保存在内存里,当然这个行为并不是规范规定的。若设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再打开浏览器这些cookie仍然有效直到超过设定的过期时间。对于保存在内存里的cookie,不同的浏览器有不同的处理方式session机制。
当程序需要为某个客户端的请求创建一个session时,服务器首先检查这个客户端的请求里是否已包含了一个session标识(称为session id),如果已包含则说明以前已经为此客户端创建过session,服务器就按照session id把这个session检索出来使用(检索不到,会新建一个),如果客户端请求不包含session id,则为客户端创建一个session并且生成一个与此session相关联的session id,session id的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个session id将被在本次响应中返回给客户端保存。保存这个session id的方式可以采用cookie,这样在交互过程中浏览器可以自动的按照规则把这个标识发送给服务器。
二、前端Cookie操作
- 写入Cookie
document.cookie = 'key=value;expires=过期时间戳ms';
补充:前端操作cookie时,时间戳必须通过toGMTString()方法转换为标准时才行
强调:前端设置cookie时,时间戳单位是毫秒ms
// 写入一条cookie
var expires = new Date(new Date().getTime() + 1000*1000).toGMTString();
// 通过getTime()将字符串保存为数字,即从1970年1月1日到现在的时间毫秒数
document.cookie = 'username=frank;expires='+expires;
// 将时间戳拼接进来
// 即使cookie被注销掉,只要没有过期,都还在
- 读取Cookie
// 读取cookie
var tempArr = document.cookie.split('=');
// split() 方法用于把一个字符串分割成字符串数组
var tempObj = {};
// 存成一个对象,数组第一个值为键,第二个为值
tempObj[tempArr[0]] = tempArr[1];
console.log(tempObj);
console.log(tempObj.username);
- 删除Cookie
// 删除一条cookie
var expires = new Date(new Date().getTime() + 1).toGMTString();
document.cookie = 'username=frank;expires='+expires;
console.log(document.cookie);