如何封装一个Cookie库

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

//设置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操作有三种:读取、写入和删除。

关于读取、写入、删除Cookie需要注意哪些情况,可以参考一下这篇文章:聊一聊 cookie

对于需要同时设置多个参数的情况,我们通常以对象的方式传入这些参数。

如:

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

一个完整的cookie操作方法库。

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
    }
})();

原文地址:https://www.cnblogs.com/yuliangbin/p/9499212.html

时间: 2024-08-02 04:17:55

如何封装一个Cookie库的相关文章

优雅的创建一个JavaScript库

这篇文章的目的是通过演示一个简单的例子来介绍在JS中实例化和定义一个库的正确方法,以优化他人编写或维护自己的JS库. 在我们深入之前,我做了两点假设: 你知道简单的JavaScript或C语言. 你不打算使用jQuery.通常情况下,一个JavaScript库不需要任何依赖. 首先,我遇到了第一个麻烦,即如何正确的看待一个JavaScript库.在C/C++中,一个库是功能的集合,并且通常不需要很完美的结构.而JavaScript的工作方式有所不同,因此我做了一些研究.最后的结论是,一个Java

C 封装一个通用链表 和 一个简单字符串开发库

引言 这里需要分享的是一个 简单字符串库和 链表的基库,代码也许用到特定技巧.有时候回想一下, 如果我读书的时候有人告诉我这些关于C开发的积淀, 那么会走的多直啊.刚参加工作的时候做桌面开发, 服务是C++写,界面是C#写.那时候刚进去评级我是中级,因为他问我关于系统锁和信号量都答出来.开发一段 时间,写C#也写的很溜.后面招我那个人让我转行就写C++和php,那时候就开始学习C++有关知识. 后面去四川工作了,开发安卓,用eclipse + java语法 + android jdk,开发前端,

C 封装一个简单二叉树基库

引文 今天分享一个喜欢佩服的伟人,应该算人类文明极大突破者.收藏过一张纸币类型如下 那我们继续科普一段关于他的简介 '高斯有些孤傲,但令人惊奇的是,他春风得意地度过了中产阶级的一生,而  没有遭受到冷酷现实的打击:这种打击常无情地加诸于每个脱离现实环境生活的  人.或许高斯讲求实效和追求完美的性格,有助于让他抓住生活中的简单现实.  高斯22岁获博士学位,25岁当选圣彼德堡科学院外籍院士,30岁任哥廷根大学数  学教授兼天文台台长.虽说高斯不喜欢浮华荣耀,但在他成名后的五十年间,这  些东西就像

如何优雅的封装一个DOM事件库

1.DOM0级事件和DOM2级事件 DOM 0级事件是元素内的一个私有属性:div.onclick = function () {},对一个私有属性赋值(在该事件上绑定一个方法).由此可知DOM 0级事件只能给元素的某一个行为绑定一次方法,第二次绑定会把前面的覆盖掉. DOM 2级事件是让DOM元素通过原型链一直找到EventTarget这个内置类原型上的addEventListener方法来实现的. DOM 2可以给某一个元素的同一个行为绑定多个不同的方法 //实例 1 obj.addEven

Cookie 详解以及实现一个 cookie 操作库

Cookie 详解以及实现一个 cookie 操作库 cookie 在前端有着大量的应用,但有时我们对它还是一知半解.下面来看看它的一些具体的用法 Set-Cookie 服务器通过设置响应头来设置客户端的 cookie,形如: Set-Cookie: <cookie名>=<cookie值> 可以同时添加多个 Set-Cookie,从而设置多个 cookie 的值. Set-Cookie 有几个可选项: Expires/Max-Age Expires/Max-Age 可以设置过期时间

如何设计一个自动布局库:以SDAutoLayout为例

前言: SDAutoLayout 在发布之后受到了众多iOS开发者的青睐和支持,不到半年时间内在GitHub上已经获得2000+star,同时被 众多公司和个人开发者 作为开发首选自动布局库.现在,以SDAutoLayout为例简单介绍一下如何设计一个自动布局库. 原文  http://www.cocoachina.com/ios/20160405/15854.html 主题 iOS开发 前言: SDAutoLayout 在发布之后受到了众多iOS开发者的青睐和支持,不到半年时间内在GitHub

iOS 8:【转】封装iOS静态库注意事项

源地址:http://fann.im/blog/2014/01/12/ios-static-library/ 做一个 iOS 静态库需要注意的东西: namespace 冲突.静态库用了某第三方库,项目也用了同样的第三方库,在编译的时候就会有 duplicate symbol 错误,因为有两份同样的第三方库.解决办法就是把用到的第三方库加上自定义前缀,包括类名.delegate 协议.常量名,尤其需要注意 Category 的方法名要修改. 封装静态库的时候应尽量避免引入重量级第三方库,多自己进

基于ionic框架封装一个图片轮播指令的几点

在这里我想在项目中封装一个图片轮播的指令 (本项目使用的是ionic框架) 1)定义指令 define(['app'],function(myapp){ myapp.directive('myslidebanner',['$state',function(s){ return{ templateUrl:'directives/slide-banner/slide-banner.html', scope:{ banimg:'=',//数据的来源 }, link:function(s,el,atr)

封装ios静态库碰到的一些问题(二)

在静态库建立好了之后呢,于是应用程序就引用它,加上拷贝的h文件,但是引用之后Build之后提示很多sybmbol 重复 于是进行检查,确实由于是从其他工程修改过来的,很多基础库都引用了,删除之,最后就只剩下xxx.h,死活就是报重复符号,我看来看去都没有 不得其解,后面突然想不过,使用了下definition,发现跳转到了一个文件,里面全部被注释的文件,于是明了,原来偷懒,有的代码是拷贝的,于是h和m文件都在,但是里面内容被注释了,结果xcode不买账啊,直接删除掉,Ok,解决问题 封装ios静