cookie是浏览器存储数据的一种机制

一、设置cookie
cookie的时效分为:
1、会话时效 session (关闭浏览器自动删除)(默认)
2、自定义时效
document.cookie = ‘name=张三’

指定时效,只要不超过时间,cookie就会一直存在
设定一个函数,来执行带有时效的cookie;
参数一:键名
参数二:数值
参数三:时效 cookie的时效是当前时间的开始

function mySetCookie ( key , value , time ) {
 //获取当前时间
 const nowTime = new Date( );//获取当前时间对象的时间戳
 let t = nowTime.getTime( )//减去8小时的时间差
 t = t - (86060*1000)//加上设置时效性的时间,这个时效性就是cookie设置的时效性
 t = t + time *1000//将时间戳设置时间对象
 nowTime.setTime( t )//将时间对象设置给cookie,作为时效性

如果有时间参数,设置cookie的时效是指定的时效时间
如果没有时间时效参数,应该设定的是会话时效
通过三元运算进行判断

let a = time === undefined ? ’ ’ : nowTime ;
document.cookie = ${key} = ${value}; expires=${a};
mySetCookie(‘name’, ‘张三’, 60)
 }

3、cookie不只是当前页面可以看到,同源的其他页面也可以看到,一般的操作方式是
在一个页面设置好cookie,在其他页面根据cookie进行操作

4、关于cookie时效的计算
(1)JS中,所有的时间,默认都是毫秒,计算时必须按毫秒计算
(2) 服务器时间与中国时区时间,有8小时时差,如果不计算这个时差,设置60秒时效,实际是8小时零60秒时效
(3)要在当前时间继承上增加设定的时效时间
参数的时效时间是秒 * 1000 转化为毫秒
当前时间戳 - 8小时毫秒 + 时效时间的毫秒

二、获取cookie

获取当前cookie
获取到的cookie是字符串
let cookieStr = document.cookie;

定义一个函数来转化cookie字符串为对象
参数cookie字符串

const cookieObj = myGetCookie(document.cookie)
function myGetCookie (cookieStr) {
 //定义一个对象
 const obj = { }

将cookie字符串转化为数组,根据间隔符 分号 和 空格
const arr1 = cookieStr.split(’; ') ;

循化遍历arr1 数组 ,键值对字符转的形式要转化为 键名 数值独立的形式

arr1.forEach((item)=>{
 //以等号分割 键值对字符串,在定义成新的数组
 const newArr = item.split(’=’);
 //要将 0 存储的键名 , 设定成对象的键名
 //要将 1 存储的数值,设定为对象的数值
 //给对象添加单元
 obj[newArr[0] ] = newArr[1];
 })return obj;
 }

总结:
原因 :
JS中只能获取到cookie字符串,必须jiangcookie字符串,转化为对象的形式,
输入键名可以获取数值