更加方便的操作cookie——cookie封装 (by vczero)

一、前言

之前使用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)上代码:这些代码应该都很直观,并且可以配合项目代码一起压缩。我觉得下面的开头的注释是重点。

 1 /*
 2  * HTTP Cookie:存储会话信息
 3  * 名称和值传送时必须是经过RUL编码的
 4  * cookie绑定在指定的域名下,非本域无法共享cookie,但是可以是在主站共享cookie给子站
 5  * cookie有一些限制:比如IE6 & IE6- 限定在20个;IE7 50个;Opear 30个...所以一般会根据【必须】需求才设定cookie
 6  * cookie的名称不分大小写;同时建议将cookie URL编码;路径是区分cookie在不同情况下传递的好方式;带安全标志cookie
 7  *     在SSL情况下发送到服务器端,http则不会。建议针对cookie设置expires、domain、 path;每个cookie小于4KB
 8  * */
 9 //对cookie的封装,采取getter、setter方式
10 (function(global){
11     //获取cookie对象,以对象表示
12     function getCookiesObj(){
13         var cookies = {};
14         if(document.cookie){
15             var objs = document.cookie.split(‘; ‘);
16             for(var i in objs){
17                 var index = objs[i].indexOf(‘=‘),
18                     name = objs[i].substr(0, index),
19                     value = objs[i].substr(index + 1, objs[i].length);
20                 cookies[name] = value;
21             }
22         }
23         return cookies;
24     }
25     //设置cookie
26     function set(name, value, opts){
27         //opts maxAge, path, domain, secure
28         if(name && value){
29             var cookie = encodeURIComponent(name) + ‘=‘ + encodeURIComponent(value);
30             //可选参数
31             if(opts){
32                 if(opts.maxAge){
33                     cookie += ‘; max-age=‘ + opts.maxAge;
34                 }
35                 if(opts.path){
36                     cookie += ‘; path=‘ + opts.path;
37                 }
38                 if(opts.domain){
39                     cookie += ‘; domain=‘ + opts.domain;
40                 }
41                 if(opts.secure){
42                     cookie += ‘; secure‘;
43                 }
44             }
45             document.cookie = cookie;
46             return cookie;
47         }else{
48             return ‘‘;
49         }
50     }
51     //获取cookie
52     function get(name){
53         return decodeURIComponent(getCookiesObj()[name]) || null;
54     }
55
56     //清除某个cookie
57     function remove(name){
58         if(getCookiesObj()[name]){
59             document.cookie = name + ‘=; max-age=0‘;
60         }
61     }
62
63     //清除所有cookie
64     function clear(){
65         var cookies = getCookiesObj();
66         for(var key in cookies){
67             document.cookie = key + ‘=; max-age=0‘;
68         }
69     }
70     //获取所有cookies
71     function getCookies(name){
72         return getCookiesObj();
73     }
74     //解决冲突
75     function noConflict(name){
76         if(name && typeof name === ‘string‘){
77             if(name && window[‘cookie‘]){
78                 window[name] = window[‘cookie‘];
79                 delete window[‘cookie‘];
80                 return window[name];
81             }
82         }else{
83             return window[‘cookie‘];
84             delete window[‘cookie‘];
85         }
86     }
87     global[‘cookie‘] = {
88         ‘getCookies‘: getCookies,
89         ‘set‘: set,
90         ‘get‘: get,
91         ‘remove‘: remove,
92         ‘clear‘: clear,
93         ‘noConflict‘: noConflict
94     };
95 })(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

时间: 2024-08-24 21:00:56

更加方便的操作cookie——cookie封装 (by vczero)的相关文章

js操作cookie简单封装

关于cookie就不做多解释了,直接上代码吧,包括:设置cookie.删除cookie.获取cookie 随便带个说明 : * HTTP Cookie:存储会话信息 * 名称和值传送时必须是经过RUL编码的 * cookie绑定在指定的域名下,非本域无法共享cookie,但是可以是在主站共享cookie给子站 * cookie有一些限制:比如IE6 & IE6- 限定在20个:IE7 50个:Opear 30个...所以一般会根据[必须]需求才设定cookie * cookie的名称不分大小写:

javascript应用cookie的封装代码

javascript应用cookie的封装代码: 关于cookie的优缺点这里就不多介绍了,都是老生长谈了,不过对于cookie的操作可能很多学习者比较陌生,下面分享一个封装好的cookie操作代码,希望能够给需要的朋友带来一定的帮助. 代码如下: var cookie=new function(){ this.set=function(name,value,hours){ var life=new Date().getTime(); life+=hours*1000*60; var cooki

JavaScript之DOM-10 cookie (cookie概述、cookie操作)

一.Cookie 概述 Cookie 简介 - Cookie 是由服务器生成并存存储在客户端文件系统(.txt格式)中的key/value对,当浏览器再次请求该站点上的页面时,就会自动把保存的Cookie发回服务器 - Cookie 使得浏览器可以在访问同一站点的不同请求间传递数据,让服务器程序识别不同的客户端 - 典型应用: 保存用户登录状态.跟踪用户行为.页面定制.保存购物车等需要保存全局变量的场合 Cookie 的存放 - Cookie 保存在客户端某个特定的目录下的一个.txt文本文件中

cookie与封装

<!DOCTYPE HTML> <html lang="zh"> <head> <meta charset="utf-8"/> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/> <meta name="viewport" content="width=de

QT 操作excel 类封装

1 # pro file 2 [plain] view plaincopy 3 CONFIG += qaxcontainer 4 5 QT += core 6 7 QT -= gui 8 9 TARGET = QExcel 10 CONFIG += console 11 CONFIG -= app_bundle 12 13 TEMPLATE = app 14 15 16 SOURCES += main.cpp \ 17 qexcel.cpp 18 19 HEADERS += \ 20 qexce

OracleHelper(对增删改查分页查询操作进行了面向对象的封装,对批量增删改操作的事务封装)

公司的一个新项目使用ASP.NET MVC开发,经理让我写个OracleHelper,我从网上找了一个比较全的OracleHelper类,缺点是查询的时候返回DataSet,数据增删改要写很多代码(当然,可以用代码生成器,不过配套的代码生成器暂时没有):又从网上找了一个封装了泛型方法的OracleHelper类,整合到一起,但貌似数据增删改查依然不方便:于是花了两天时间,在原有基础上对增删改查分页查询操作进行了面向对象的封装,并且对批量增删改操作进行事务封装,写事务代码更方便. 原理: 1.利用

谈谈Delphi中的类和对象:五、类是一种对数据和操作高度的封装机制;六、类是一种代码重用机制

五.类是一种对数据和操作高度的封装机制 1)数据封装 unit Unit2; interface type TEmployee = class; private FName: String; public Constructor Create; function GetName: String; procedure SetName(AName: String); end; implementation constructor TEmployee.Create; begin FName:= 'Xu

javascript面向对象程序设计——封装(by vczero)

在javascript中,我们宣称是面向对象的程序设计.其实面向对象是js与生俱来的特性,每一门OOP语言都有自己的特性,我们不能为了OOP,去模仿另一门语言,把握语言的特性才是正道.我们可以通过new Object()来创建一个实例,但是不推荐这种形式,我们需要更为直观的数据封装. 一.封装你的数据特性 1 var user = { 2 name: '', 3 email: '' 4 }; 很简单,我们封装了一个JSON格式的对象,也称为字面量对象:User对象包含两个属性name和email

javscript对cookie的操作,以及封装

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> 用户名:<input type="text" name="user" id="user"> 年龄: