1 /**2  * 封装cookie的操作3  * @type {Object}4  */5 var CookieUtil = {6     /**7      * 根据cookie的名字获取相应的值8      * @param name cookie名字9      * @return {*}10      */11     get:function (name) {12         //对name进行URL编码13         var cookieName = encodeURIComponent(name) + '=',14             cookieStart = document.cookie.indexOf(cookieName),15             cookieValue = null;16         //找到cookieName17         if (cookieStart > -1) {18             //以cookieStart为起点找到最近的";"19             var cookieEnd = document.cookie.indexOf(';', cookieStart);20             //没找到";",则是document.cookie的最后一个值21             if (cookieEnd === -1) {22                 cookieEnd = document.cookie.length;23             }24             //提取相应value字段25             cookieValue = decodeURIComponent(document.cookie.substring(cookieStart + cookieName.length, cookieEnd));26         }27         //返回28         return cookieValue;29     },30     /**31      * 设置一个cookie32      * @param name cookie名字33      * @param value 相应的值34      * @param expire 生存周期 Date35      * @param path 路径36      * @param domain 域名37      * @param secure Boolean38      */39     set:function (name, value, expire, path, domain, secure) {40         //必须先进行URL编码41         var cookieText = encodeURIComponent(name) + '=' + encodeURIComponent(value);42         if (expire instanceof Date) {43             //toGMTString()方法正确格式化Date对象44             cookieText += '; expire=' + expire.toGMTString();45         }46         if (path) {47             cookieText += '; path=' + path;48         }49         if (domain) {50             cookieText += '; domain=' + domain;51         }52         if (secure) {53             cookieText += '; secure';54         }55         document.cookie = cookieText;56     },57     /**58      * 删除cookie59      * @param name60      * @param path61      * @param domain62      * @param secure63      */64     unset:function (name, path, domain, secure) {65         this.set(name, '', new Date(0), path, domain, secure);66     }67 };68 /*69  //set cookies70  CookieUtil.set(“name”, “Nicholas”);71  CookieUtil.set(“book”, “Professional JavaScript”);72  //read the values73  alert(CookieUtil.get(“name”)); //”Nicholas”74  alert(CookieUtil.get(“book”)); //”Professional JavaScript”75  //remove the cookies76  CookieUtil.unset(“name”);77  CookieUtil.unset(“book”);78  //set a cookie with path, domain, and expiration date79  CookieUtil.set(“name”, “Nicholas”, “/books/projs/”, “www.wrox.com”,80  new Date(“January 1, 2010”));81  //delete that same cookie82  CookieUtil.unset(“name”, “/books/projs/”, “www.wrox.com”);83  //set a secure cookie84  CookieUtil.set(“name”, “Nicholas”, null, null, null, true);85  */86 87 //子cookie的操作88 //为了绕开浏览器的单域名下的cookie数限制89 //子cookie是存放在单个cookie中的更小段的数据90 var SubCookieUtil = {91     /**92      * 获取单个子cookie的值93      * @param name cookie名称94      * @param subName 子cookie名称95      * @return {*}96      */97     get:function (name, subName) {98         var subCookies = this.getAll(name);99         if (subCookies) {
100             return subCookies(subName);
101         } else {
102             return null;
103         }
104     },
105     /**
106      * 获取所有子cookie并将它们放入一个对象中返回
107      * @param name cookie名称
108      * @return {*} 返回对象或null
109      */
110     getAll:function (name) {
111         var cookieName = encodeURIComponent(name) + "=",
112             cookieStart = document.cookie.indexOf(cookieName),
113             cookieValue = null,
114             result = {};
115         if (cookieStart > -1) {
116             var cookieEnd = document.cookie.indexOf(";", cookieName);
117             if (cookieEnd === -1) {
118                 cookieEnd = document.cookie.length;
119             }
120             //没有进行解码,因为要对子cookie分离操作
121             cookieValue = document.cookie.substring(cookieStart + cookieName.length, cookieEnd);
122             //
123             if (cookieValue.length > 0) {
124                 //分离出子cookie的对象
125                 var subCookies = cookieValue.split("&");
126                 //遍历分隔出子cookie的名称和值,解码后返回对象
127                 for (var i = 0, len = subCookies.length; i < len; i++) {
128                     var parts = subCookies[i].split("=");
129                     result[decodeURIComponent(parts[0])] = decodeURIComponent(parts[1]);
130                 }
131                 return result;
132             }
133         }
134         //没找到,返回空
135         return null;
136     },
137     /**
138      * 存储单个子cookie
139      * @param name cookie名称
140      * @param subName 子cookie名称
141      * @param value 子cookie值
142      * @param expires 失效日期
143      * @param path 路径
144      * @param domain 域名
145      * @param secure Boolean安全作用域
146      */
147     set:function (name, subName, value, expires, path, domain, secure) {
148         //获取name名称的所有子cookie,没有则创建空对象
149         var subcookies = this.getAll(name) || {};
150         //给对象添加属性和值
151         subcookies[subName] = value;
152         //调用setAll()方法
153         this.setAll(name, subcookies, expires, path, domain, secure);
154     },
155     /**
156      * 存储所有子cookie
157      * @param name cookie名称
158      * @param subcookies 子cookie名称
159      * @param expires 失效日期
160      * @param path 路径
161      * @param domain 域名
162      * @param secure Boolean安全作用域
163      */
164     setAll:function (name, subcookies, expires, path, domain, secure) {
165         var cookieText = encodeURIComponent(name) + "=";
166         //创建数组,用于保存子cookie
167         var subcookieParts = [];
168         //遍历对象属性
169         for (var subName in subcookies) {
170             //如果存在,则把编码后的名称和值保存到数组
171             if (subName.length > 0 && subcookies.hasOwnProperty(subName)) {
172                 subcookieParts.push(encodeURIComponent(subName) + "=" + encodeURIComponent(subcookies[subName]));
173             }
174         }
175         //存在子cookie
176         if (subcookieParts.length > 0) {
177             //连接子cookie
178             cookieText += subcookieParts.join("& ");
179             if (expires instanceof Date) {
180                 cookieText += ";expires=" + expires.toGMTString();
181             }
182             if (path) {
183                 cookieText += ";path=" + path;
184             }
185             if (domain) {
186                 cookieText += ";domain=" + domain;
187             }
188             if (secure) {
189                 cookieText += ";secure";
190             }
191         } else {
192             //相当于删除cookie操作
193             cookieText += ";expires=" + (new Date(0)).toGMTString();
194         }
195         document.cookie = cookieText;
196     },
197     /**
198      * 删除单个子cookie的名称和值
199      * @param name
200      * @param subName
201      * @param path
202      * @param domain
203      * @param secure
204      */
205     unset:function (name, subName, path, domain, secure) {
206         var subcookies = this.getAll(name);
207         if (subcookies) {
208             //删除对应的属性和值
209             delete subcookies[subName];
210             //重新设置cookie
211             this.setAll(name, subcookies, null, path, domain, secure);
212         }
213     },
214     /**
215      * 删除所有子cookie
216      * @param name
217      * @param path
218      * @param domain
219      * @param secure
220      */
221     unsetAll:function (name, path, domain, secure) {
222         this.setAll(name, null, new Date(0), path, domain, secure);
223     }
224 };
225 /*
226  //assume document.cookie=data=name=Nicholas&book=Professional%20JavaScript
227  //get all subcookies
228  var data = SubCookieUtil.getAll(“data”);
229  alert(data.name); //”Nicholas”
230  alert(data.book); //”Professional JavaScript”
231  //get subcookies individually
232  alert(SubCookieUtil.get(“data”, “name”)); //”Nicholas”
233  alert(SubCookieUtil.get(“data”, “book”)); //”Professional JavaScript”
234
235  //assume document.cookie=data=name=Nicholas&book=Professional%20JavaScript
236  //set two subcookies
237  SubCookieUtil.set(“data”, “name”, “Nicholas”);
238  SubCookieUtil.set(“data”, “book”, “Professional JavaScript”);
239  //set all subcookies with expiration date
240  SubCookieUtil.setAll(“data”, { name: “Nicholas”, book: “Professional JavaScript” },
241  new Date(“January 1, 2010”));
242  //change the value of name and change expiration date for cookie
243  SubCookieUtil.set(“data”, “name”, “Michael”, new Date(“February 1, 2010”));
244
245  //just remove the “name” subcookie
246  SubCookieUtil.unset(“data”, “name”);
247  //remove the entire cookie
248  SubCookieUtil.unsetAll(“data”);
249  */

转载于:https://www.cnblogs.com/webFrontDev/archive/2012/11/24/2786022.html

对cookie和子cookie操作的封装相关推荐

  1. 微信公众号删除cookie失败,cookie设置了过期时间不管用,微信公众号cookie比较诡异,删不掉,解决办法,原生JS封装cookie统一操作删除cookie,读取cookie,删除cookie

    公司有个项目,需求是这样的: pc 端的项目,有一个步骤可以在手机上操作,页面都在同一个域名下面,但是pc端需要登录(用到了 cookie ),公众号端不需要登录(不用 cookie ) ,不清楚服务 ...

  2. android 字符串数组去重,GitHub - deng-ming-hao/ec-do: 实例为日常开发常用的小实例,包括数组去重,打乱数组,字母大小写转换,cookie操作的封装等。...

    ec-do 自己封装的常用操作实例 实例为日常开发常用的小实例,包括数组去重,打乱数组,字母大小写转换,cookie操作的封装等. 使用方法 引入ec-do.js //去除空格 ecDo.trim(' ...

  3. Java管理Cookie增删改查操作

    Cookie属性 了解这几个属性之后,就知道如何进行Cookie的操作了. name Cookie的名称. value Cookie的值. maxAge Cookie的失效时间,有以下几种值,默认为- ...

  4. php 置cookie,另:(Cookie.php)cookie操作

    [TOC] * * * * * ## 1 Cookie文件源代码(thinkphp/library/think/Cookie.php) ~~~ protected static $config = [ ...

  5. java修改cookie的值_Java管理Cookie增删改查操作。

    Cookie属性 了解这几个属性之后,就知道如何进行Cookie的操作了. name Cookie的名称. value Cookie的值. maxAge Cookie的失效时间,有以下几种值,默认为- ...

  6. 基础的java增删改查,Java基础系列(基础):Java使用Cookie增删改查操作!

    什么是Cookie? Cookie是由W3C组织提出,最早由NetScape社区发展的一种机制. Cookie是存储于访问者的计算机中的变量.每当同一台计算机通过浏览器请求某个页面时,就会发送这个co ...

  7. java删除一级域名下cookie_java操作cookie示例(删除cookie)

    1.设置Cookie 代码如下: Cookie cookie = new Cookie("key", "value"); cookie.setMaxAge(60 ...

  8. cookie写_cookie-parser读操作

    给页面发送/写cookie 是服务器做的事,所以是res.cookie("name","value") 写,发送cookie res.cookie(" ...

  9. Java操作Cookie之添加Cookie

    首先给大家分享一个巨牛巨牛的人工智能教程,是我无意中发现的.教程不仅零基础,通俗易懂,而且非常风趣幽默,还时不时有内涵段子,像看小说一样,哈哈-我正在学习中,觉得太牛了,所以分享给大家!点这里可以跳转 ...

最新文章

  1. python urllib.request 爬虫 数据处理-python爬虫1--urllib请求库之request模块
  2. db2查询字段备注_通过逐浪数据精灵管理sqlserver数据表备注以及字段说明
  3. 《信号检测与处理》的学习
  4. 调查预测:云部署将于2018年中迎来小高峰
  5. Codeup-问题 A: 【字符串】最长回文子串
  6. 小米拒绝权限_小米手机MIUI12真有那么好吗?
  7. 转:传入的表格格式数据流(TDS)远程过程调用(RPC)协议流不正确 .
  8. 性能强悍的开源关系数据库PostgreSQL
  9. oracle join(比较全面的解释了join)
  10. Magnification API-Windows放大镜
  11. Linux使用PulseAudio设置音频card的默认profile
  12. android 屏蔽电源键,home键
  13. 全国绿地空间暴露数据集
  14. fat32 linux 打包工具_自己封装系统(雨林木风一键系统封装工具V3.65)
  15. 怎么选择Java培训机构?
  16. vue进阶04-vue文档生成工具vuepress2
  17. 利用pygame模块设计一个植物大战僵尸游戏初版设定
  18. 2021 年8月份最新数据库排行榜出炉
  19. 《数据结构课程设计》实验报告
  20. android8 Camera2 从 CameraService 到 HAL Service

热门文章

  1. 「洛谷2495」「BZOJ3052」「SDOI2001」消耗战【虚树+树形动态规划】
  2. 第二阶段团队绩效考核报告
  3. 0076-小升初1:生日蛋糕
  4. pip安装报错处理+PyPi源切换教程
  5. Robotium_断言方法assert、is、search
  6. JS中的预编译(词法分析)阶段和执行阶段
  7. C/S通信模型与B/S通信模型介绍
  8. 二叉树学习笔记--先序遍历
  9. 解决MySQL忘记root密码
  10. C语言给出任意4个数算24点,讨论24点算法。