如何封装一个Cookie库 Cookie详解

Cookie详解咱们已经了解到了Cookie是为了实现有状态的基于HTTP协议的应用而存在的。一个Cookie的由如下几个部分组成:html

//设置cookie的格式和Set-Cookie头中使用的格式同样
document.cookie = "name=value; expires=expiration_time; path=domain_path; domain=domain_name; secure"
//这些参数中,只有cookie的名字和值是必需 的。下面是一个简单的例子。
//须要开一个服务器才能设置成功,本地测试的状况下设置cookie无效
document.cookie = "name=Nicholas";

很显然,JavaScript中读写cookie不是很是直观, 经常须要写一些函数来简化cookie的功能。基本的cookie操做有三种:读取、写入和删除。segmentfault

关于读取、写入、删除Cookie须要注意哪些状况,能够参考一下这篇文章:聊一聊 cookie安全

对于须要同时设置多个参数的状况,咱们一般以对象的方式传入这些参数。服务器

如:cookie

default = {
    'name': null,
    'value': null,
    'expires': new Date().getTime() + (1000*60*60*24),//默认Cookie的有效期为1天 'path': '/',
    'domain': '',
    'secure': false
};
//每一个参数的意义能够看以前写的文章

 一个完整的cookie操做方法库。dom

let cookieRender = (function () {
    //设置一个Cookie
    /**
     * 要想修改一个cookie,只须要从新赋值就行,旧的值会被新的值覆盖。
     * 但要注意一点,在设置新cookie时,path/domain这几个选项必定要旧cookie 保持同样。
     * 不然不会修改旧值,而是添加了一个新的 cookie。
     * params options 对象
     *         name    cookie的名字
     *         value    cookie的值
     *         expires    cookie的过时时间,传入毫秒数
     *         path    cookie生效的路径
     *         domain    cookie生效的域
     *         secure    cookie的安全标志
    */
    function setValue(options) {//当传入的参数过多时,能够用一个对象的方式传入
        let _default = {
            'name': null,
            'value': null,
            'expires': new Date().getTime() + (1000*60*60*24),
            'path': '/',
            'domain': '',
            'secure': false
        };
        for (let key in options) {
            if (options.hasOwnProperty(key)){
                _default[key] = options[key];
            }
        }
        document.cookie = _default.name + "=" + escape(_default.value) + "; expires=" + _default.expires + "; path=" + _default.path +  "; domain=" + _default.domain;
        if (_default['secure']) {
            document.cookie += '; secure;';
        }
    }
    
    //获取Cookie
    function getValue(name) {
        let arr = document.cookie.match(new RegExp("(^| )" + name + "=([^;]*)(;|$)"));
        if (arr != null) {
            return unescape(arr[2]);
        }
        return null;
    }
    
    //删除
    /*
     * 删除一个cookie 也挺简单,也是从新赋值,
     * 只要将这个新cookie的expires 选项设置为一个过去的时间点就好了。
     * 但一样要注意,path/domain/这几个选项必定要旧cookie 保持同样。
    */
    function removeValue(options) {
        let _default = {
            name: null,
            path: '/',
            domain: ''
        };
        for (key in options) {
            if (options.hasOwnProperty(key)) {
                _default[key] = options[key];
            }
            if (this.getValue(_default)) {
                document.cokie = _default.name + "= " + ";path=" + _default.path + ";domain=" + _default.domain + ";expires=" + new Date(0);
            }
        }
    }
    
    return {
        set: setValue,
        get: getValue,
        remove: removeValue
    }
})();
相关文章
相关标签/搜索