/**
* 设置cookie
* @param name
* @param value
* @param config expires:(Number|Date)有效期;设置一个整数时,单位是天;也可以设置一个日期对象作为Cookie的过期日期;
path:(String)创建该Cookie的页面路径;
domain:(String)创建该Cookie的页面域名;
secure:(Boolean)如果设为true,那么此Cookie的传输会要求一个安全协议,例如:HTTPS;
*/
function addCookie(name,value,config = {
expires: null,
path: null,
maxAge: null,
domain: null,
secure: true,
httpOnly: true
}) {
value = $.cookie.json ? JSON.stringify(value) : value;
value = $.cookie.raw ? value : encodeURIComponent(value);
let cookieStr = name + '=' + value;
if(config) {
if(config.expires) {
if(typeof config.expires === 'number') {
const date=new Date();
date.setTime(date.getTime()+config.expires*86400000);
cookieStr += '; expires=' + date.toUTCString();
}else if(config.expires instanceof Date) {
cookieStr += '; expires=' + config.expires.toUTCString();
}else {
throw new Error('expires属性必须为Number或Date类型')
}
}
cookieStr += config.path ? '; path='+config.path : '';
cookieStr += config.maxAge ? '; max-age='+config.maxAge : '';
cookieStr += config.domain ? '; domain=' + config.domain : '';
cookieStr += config.secure ? '; secure' : '';
cookieStr += config.httpOnly ? ';httpOnly' : '';
}
document.cookie = cookieStr;
}
/**
* 获取cookie
* @param name
* @returns {
{}|*}
*/
function getCookie(name) {
let cookieStrArr = document.cookie.split(';');
let cookieObj = {
};
cookieStrArr.forEach(cookieStr => {
let temp = cookieStr.split('=');
let key = temp[0].trim();
let value = temp[1];
value = $.cookie.json ? JSON.parse(value) : value;
value = $.cookie.raw ? value : decodeURIComponent(value);
cookieObj[key] = value;
});
if(name) {
return cookieObj[name];
}else {
return cookieObj;
}
}
/**
* 移除cookie
* @param name
* @param config
*/
function removeCookie(name,config) {
//过期时间设为以前的时间就是删除cookie
config.expires = -1;
addCookie(name,null,config);
}
$.extend({
/**
* 设置,获取或移除cookie
* @param name
* @param value
* @param config
*/
cookie: function (name,value,config) {
if(value) {
addCookie(name,value,config);
}else if(value == null) {
removeCookie(name,null,config);
}else {
getCookie(name);
}
},
/**
* 移除cookie
* @param name
* @param config
* @returns {boolean}
*/
removeCookie(name,config) {
if(getCookie(name)) {
removeCookie(name,config);
return true;
}else {
return false;
}
}
});
/**
* 默认值:false。
默认情况下,读取和写入 cookie 的时候自动进行编码和解码(使用 encodeURIComponent 编码,decodeURIComponent 解码)。要关闭这个功能设置 raw:true 即可:
* @type {boolean}
*/
$.cookie.raw = false;
/**
* 默认值:false。
* 设置 cookie 的数据使用 json 存储与读取,这时就不需要使用 JSON.stringify 和 JSON.parse 了。
* @type {boolean}
*/
$.cookie.json = false;
还没有评论,来说两句吧...