一、设置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字符串,转化为对象的形式, 输入键名可以获取数值