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 相关文章推荐
Js+Dhtml:WEB程序员简易开发工具包(预先体验版)
Nov 07 Javascript
js实现的网站首页随机公告随机公告
Mar 14 Javascript
jQuery的12招常用技巧分享
Aug 08 Javascript
JQuyer $.post 与 $.ajax 访问WCF ajax service 时的问题需要注意的地方
Sep 20 Javascript
javascript中parseInt()函数的定义和用法分析
Dec 20 Javascript
script标签属性用type还是language
Jan 21 Javascript
基于js里调用函数时,函数名带括号和不带括号的区别
Jul 28 Javascript
Angular4 ElementRef的应用
Feb 26 Javascript
Vue Router的懒加载路径的解决方法
Jun 21 Javascript
Chrome插件开发系列一:弹窗终结者开发实战
Oct 02 Javascript
如何使用gpu.js改善JavaScript的性能
Dec 01 Javascript
vue响应式原理与双向数据的深入解析
Jun 04 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
第十四节 命名空间 [14]
2006/10/09 PHP
php遍历目录viewDir函数
2009/12/15 PHP
php字符编码转换之gb2312转为utf8
2013/10/28 PHP
PHP return语句的另一个作用
2014/07/30 PHP
使用新浪微博API的OAuth认证发布微博实例
2015/03/27 PHP
php无序树实现方法
2015/07/28 PHP
PHPExcel 修改已存在Excel的方法
2018/05/03 PHP
php实现微信公众平台发红包功能
2018/06/14 PHP
js玩一玩WSH吧
2007/02/23 Javascript
推荐一些非常不错的javascript学习资源站点
2007/08/29 Javascript
实测jquery data()如何存值
2013/08/18 Javascript
javascript设计模式之对象工厂函数与构造函数详解
2015/07/30 Javascript
浅谈JS中的三种字符串连接方式及其性能比较
2016/09/02 Javascript
Javascript 对cookie操作详解及实例
2016/12/29 Javascript
JavaScript实现的商品抢购倒计时功能示例
2017/04/17 Javascript
微信小程序canvas写字板效果及实例
2017/06/15 Javascript
详解react阻止无效重渲染的多种方式
2018/12/11 Javascript
详解Vue中使用Axios拦截器
2019/04/22 Javascript
vue实现购物车的小练习
2020/12/21 Vue.js
Python提示[Errno 32]Broken pipe导致线程crash错误解决方法
2014/11/19 Python
用Python编写脚本使IE实现代理上网的教程
2015/04/23 Python
关于Python面向对象编程的知识点总结
2017/02/14 Python
Python实现的tcp端口检测操作示例
2018/07/24 Python
django教程如何自学
2020/07/31 Python
捷克原创男装和女装购物网站:Bolf.cz
2018/04/28 全球购物
新西兰最大的天然保健及护肤品网站:HealthPost(直邮中国)
2021/02/13 全球购物
市场部专员岗位职责
2013/11/30 职场文书
品牌推广策划方案
2014/05/28 职场文书
竞赛口号大全
2014/06/16 职场文书
安全环保演讲稿
2014/08/28 职场文书
2014年第四季度入党积极分子思想汇报(十八届四中全会)
2014/11/03 职场文书
2014年话务员工作总结
2014/11/19 职场文书
运动会报道稿大全
2015/07/23 职场文书
Java 超详细讲解IO操作字节流与字符流
2022/03/25 Java/Android
使用Docker容器部署rocketmq单机的全过程
2022/04/03 Servers
动视暴雪取消疫苗禁令 让所有员工返回线下工作
2022/04/03 其他游戏