手写jquery.cookie插件

/**
 * 设置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;

你可能感兴趣的:(JQuery)