手写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;
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值