javascript制作的cookie封装及使用指南


Posted in Javascript onJanuary 02, 2015

一、前言

之前使用cookie,都是document.cookie的形式去操作,兼容性虽好,但是麻烦。个人又是个比较喜欢造轮子的人,所以针对cookie,封装了个工具类。很长时间以来,我都喜欢写代码,而不太喜欢文字总结,也不太喜欢写些零碎的东西,看来得改。

二、思路

(1)如何封装,封装成啥样

如何封装:就是使用原生的js封装成工具,那样到哪里都能能用。针对document.cookie封装是最好的方式,所有的操作都基于document.cookie。

封装成啥样:封装成能够以对象的形式存在,同时可以使用getter & setter方法的实行。

(2)封装哪些方法

get()、set(name, value, opts)、remove(name)、clear()、getCookies()等等,个人觉得封装这么多方法足矣使用cookie了。

三、行动

(1)了解cookie, cookie的实质是HTTP cookie,在客户端表现的对象时document.cookie.更多了解,可以看我下面的代码即注释

(2)上代码:这些代码应该都很直观,并且可以配合项目代码一起压缩。我觉得下面的开头的注释是重点。

/*

 * HTTP Cookie:存储会话信息

 * 名称和值传送时必须是经过RUL编码的

 * cookie绑定在指定的域名下,非本域无法共享cookie,但是可以是在主站共享cookie给子站

 * cookie有一些限制:比如IE6 & IE6- 限定在20个;IE7 50个;Opear 30个...所以一般会根据【必须】需求才设定cookie

 * cookie的名称不分大小写;同时建议将cookie URL编码;路径是区分cookie在不同情况下传递的好方式;带安全标志cookie

 *     在SSL情况下发送到服务器端,http则不会。建议针对cookie设置expires、domain、 path;每个cookie小于4KB

 * */

//对cookie的封装,采取getter、setter方式

(function(global){

    //获取cookie对象,以对象表示

    function getCookiesObj(){

        var cookies = {};

        if(document.cookie){

            var objs = document.cookie.split('; ');

            for(var i in objs){

                var index = objs[i].indexOf('='),

                    name = objs[i].substr(0, index),

                    value = objs[i].substr(index + 1, objs[i].length);    

                cookies[name] = value;

            }

        }

        return cookies;

    }

    //设置cookie

    function set(name, value, opts){

        //opts maxAge, path, domain, secure

        if(name && value){

            var cookie = encodeURIComponent(name) + '=' + encodeURIComponent(value);

            //可选参数

            if(opts){

                if(opts.maxAge){

                    cookie += '; max-age=' + opts.maxAge; 

                }

                if(opts.path){

                    cookie += '; path=' + opts.path;

                }

                if(opts.domain){

                    cookie += '; domain=' + opts.domain;

                }

                if(opts.secure){

                    cookie += '; secure';

                }

            }

            document.cookie = cookie;

            return cookie;

        }else{

            return '';

        }

    }

    //获取cookie

    function get(name){

        return decodeURIComponent(getCookiesObj()[name]) || null;

    }

    //清除某个cookie

    function remove(name){

        if(getCookiesObj()[name]){

            document.cookie = name + '=; max-age=0';

        }

    }

    //清除所有cookie

    function clear(){

        var cookies = getCookiesObj();

        for(var key in cookies){

            document.cookie = key + '=; max-age=0';

        }

    }

    //获取所有cookies

    function getCookies(name){

        return getCookiesObj();

    }

    //解决冲突

    function noConflict(name){

        if(name && typeof name === 'string'){

            if(name && window['cookie']){

                window[name] = window['cookie'];

                delete window['cookie'];

                return window[name];

            }

        }else{

            return window['cookie'];

            delete window['cookie'];

        }

    }

    global['cookie'] = {

        'getCookies': getCookies,

        'set': set,

        'get': get,

        'remove': remove,

        'clear': clear,

        'noConflict': noConflict

    };

})(window);

 (3)example

<!DOCTYPE html>

<html>

    <head>

        <meta charset="utf-8">

        <title>cookie example</title>

    </head>

    <body>

        <script type="text/javascript" src="cookie.js" ></script>

        <script type="text/javascript">

            console.log('----------cookie对象-------------');

            console.log(cookie);

            console.log('----------对象-------------');

            console.log(cookie.getCookies());

            console.log('----------设置cookie-------------');

            console.log(cookie.set('name', 'wlh'));

            console.log('----------设置cookie 123-------------');

            console.log(cookie.set('name', 'wlh123'));

            console.log('----------设置cookie age-------------');

            console.log(cookie.set('age', 20));

            console.log('----------获取cookie-------------');

            console.log(cookie.get('name'));

            console.log('----------获取所有-------------');

            console.log(cookie.getCookies());

            console.log('----------清除age-------------');

            console.log(cookie.remove('age'));

            console.log('----------获取所有-------------');

            console.log(cookie.getCookies());

            console.log('----------清除所有-------------');

            console.log(cookie.clear());

            console.log('----------获取所有-------------');

            console.log(cookie.getCookies());

            console.log('----------解决冲突-------------');

            var $Cookie = cookie.noConflict(true /*a new name of cookie*/);

            console.log($Cookie);

            console.log('----------使用新的命名-------------');

            console.log($Cookie.getCookies());

        </script>

    </body>

</html>

(4)代码地址:https://github.com/vczero/cookie

Javascript 相关文章推荐
JavaScript 继承详解(二)
Jul 13 Javascript
发布一个基于javascript的动画类 Fx.js
Nov 05 Javascript
使用javascript:将其它类型值转换成布尔类型值的解决方法详解
May 07 Javascript
关于Javascript作用域链的八点总结
Dec 06 Javascript
JavaScript中的分号插入机制详细介绍
Feb 11 Javascript
jQuery插件开发汇总
May 15 Javascript
Bootstrap treeview实现动态加载数据并添加快捷搜索功能
Jan 07 Javascript
在angular 6中使用 less 的实例代码
May 13 Javascript
Vuejs 实现简易 todoList 功能 与 组件实例代码
Sep 10 Javascript
vue-父子组件和ref实例详解
Nov 10 Javascript
VUE中鼠标滚轮使div左右滚动的方法详解
Dec 14 Vue.js
vue使用localStorage持久性存储实现评论列表
Apr 14 Vue.js
分享一则javascript 调试技巧
Jan 02 #Javascript
javascript实现无限级select联动菜单
Jan 02 #Javascript
javascript实现表格排序 编辑 拖拽 缩放
Jan 02 #Javascript
原生javascript实现DIV拖拽并计算重复面积
Jan 02 #Javascript
javascript使用smipleChart实现简单图表
Jan 02 #Javascript
原生javascript实现简单的datagrid数据表格
Jan 02 #Javascript
浅谈jQuery事件绑定原理
Jan 02 #Javascript
You might like
德劲1104的电路分析与改良
2021/03/01 无线电
隐藏你的.php文件的实现方法
2007/03/19 PHP
浅谈web上存漏洞及原理分析、防范方法(文件名检测漏洞)
2013/06/29 PHP
从性能方面考虑PHP下载远程文件的3种方法
2015/12/29 PHP
uploadify在Firefox下丢失session问题的解决方法
2013/08/07 Javascript
浅析用prototype定义自己的方法
2013/11/14 Javascript
用js+iframe形成页面的一种遮罩效果的具体实现
2013/12/31 Javascript
JQuery动画与特效实例分析
2015/02/02 Javascript
Javascript中的Callback方法浅析
2015/03/15 Javascript
jQuery判断多个input file 都不能为空的例子
2015/06/23 Javascript
JavaScript定时器和优化的取消定时器方法
2015/07/03 Javascript
Vuejs第六篇之Vuejs与form元素实例解析
2016/09/05 Javascript
node.JS md5加密中文与php结果不一致的解决方法
2017/05/05 Javascript
浅谈Vuejs中nextTick()异步更新队列源码解析
2017/12/31 Javascript
vue.js实现的绑定class操作示例
2018/07/06 Javascript
React 使用Hooks简化受控组件的状态绑定
2019/03/18 Javascript
微信小程序实现天气预报功能(附源码)
2020/12/10 Javascript
Python使用Flask框架同时上传多个文件的方法
2015/03/21 Python
Python Requests 基础入门
2016/04/07 Python
Python错误: SyntaxError: Non-ASCII character解决办法
2017/06/08 Python
Python使用正则表达式过滤或替换HTML标签的方法详解
2017/09/25 Python
解决python中os.listdir()函数读取文件夹下文件的乱序和排序问题
2018/10/17 Python
python使用Qt界面以及逻辑实现方法
2019/07/10 Python
Python可变对象与不可变对象原理解析
2020/02/25 Python
各大浏览器 CSS3 和 HTML5 兼容速查表 图文
2010/04/01 HTML / CSS
AmazeUI 平滑滚动效果的示例代码
2020/08/20 HTML / CSS
美国汽配连锁巨头Pep Boys官网:轮胎更换、汽车维修服务和汽车零部件
2017/01/14 全球购物
亚洲最大的眼镜批发商和零售商之一:Glasseslit
2018/10/08 全球购物
求职信写作要突出重点
2014/01/01 职场文书
应届生求职自荐信范文
2014/04/07 职场文书
家长建议怎么写
2014/05/15 职场文书
法学专业毕业生求职信
2014/06/12 职场文书
药剂专业求职信
2014/06/20 职场文书
锦旗标语大全
2014/06/23 职场文书
论文答辩开场白大全
2015/05/27 职场文书
一篇带你入门Java垃圾回收器
2021/06/16 Java/Android