const cookieUtils = {
get(name){//获取cookie
let cookies = document.cookie;
cookie_name = `${encodeURIComponent(name)}=`,
cookie_start = cookies.indexOf(cookie_name),
cookie_value = null;
if(cookie_start > -1){
let cookie_end = cookies.indexOf(";",cookie_start);
if(cookie_end == -1){
cookie_end = cookies.length;
}
cookie_value = decodeURIComponent(cookies.substring(cookie_start+cookie_name.length,cookie_end));
}
return cookie_value;
},
set(name,value,expires,path,domain,secure){//设置cookie
let cookie = `${encodeURIComponent(name)}=${encodeURIComponent(value)}`;
if(expires instanceof Date){
cookie += `;expries=${expires.toGMTString()}`;
}
if(path){
cookie += `;path=${path}`
}
if(domain){
cookie += `;domain=${domain}`
}
if(secure){
cookie += `;secure`
}
document.cookie = cookie;
},
cleart(name,path,domain,secure){//清除cookie
this.set(name,"",new Date(0),path,domain,secure);
},
/*子cookie的格式为:name=name1=value1&name2=value2.....(其余格式如cookie)*/
subGet(name,subName){//获取单个子cookie
let sub_cookies = this.subGetAll(name);
if(sub_cookies){
return sub_cookies[subName];
}else{
return null;
}
},
subGetAll(name){//获取所有子cookie,并进行序列化为对象
let cookie_value = this.get(name);
if(cookie_value){
let sub_cookies = cookie_value.split("&"),result = Object.create(null);
sub_cookies.forEach(item=>{
let parts = item.split("=");
result[decodeURIComponent(parts[0])] = decodeURIComponent(parts[1]);
})
return result;
}else{
return null;
}
},
subSet(name,subName,value,expries,path,domain,secure){//写入单个子cookie
let sub_cookies = this.subGetAll(name) || Object.create(null);
sub_cookies[subName] = value;
this.subSetAll(name,sub_cookies,expires,path,domain,secure);
},
subSetAll(name,subcookies,expires,path,domain,secure){//写入所有子cookie
let value = "",sub_arr = [];
for(let sub_name in subcookies){
if(sub_name.length > 0 && subcookies.hasOwnProperty(sub_name)){
sub_arr.push(`${sub_name}=${subcookies[sub_name]}`);
}
};
if(sub_arr.length > 0){
value = sub_arr.join("&");
this.set(name,value,expires,path,domain,secure);
}else{
this.cleart(name,path,domain,secure);
}
},
subUnset(name,subName,path,domain,secure){//删除单个子cookie,删除所有cookie使用cleart
let subcookies = this.subGetAll(name);
if(subcookies){
delete subcookies[subName];
this.subSetAll(name,subcookies,null,path,domain,secure);
}
}
}