对cookie和子cookie操作的封装

  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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/434102.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解决Ubuntu下切换到root用户后没有声音问题

Ubuntu在root用户下&#xff0c;为了安全考虑默认是关闭了声音系统的。 如果要开很简单&#xff0c;因为root登录后pulseaudio没有启动。所以要先启动它 将root加到pulse和pulse-access组&#xff1a; sudo usermod -a -G pulse-access root gpasswd -a root pulse gpasswd -…

lua 给userdata设置元表_lua学习之复习汇总篇

第六日笔记1. 基础概念程序块定义在 lua 中任何一个源代码文件或在交互模式中输入的一行代码程序块可以是任意大小的程序块可以是一连串语句或一条命令也可由函数定义构成&#xff0c;一般将函数定义写在文件中&#xff0c;然后用解释器执行这个文件换行在代码中不起任何作用&a…

java代码请求2次_Android基于OkHttpUtils网络请求的二次封装

OkHttpUtils网络请求为什么进行二次封装&#xff1f;1、减少代码量2、后期换网络处理框架方便二次封装的实现原理1、将网络请求提取在一个方法中2、对里面的可变参数,可以通过参数传递过去,也可以提供一个set方法传递过去3、对于请求失败和成功,我们可以使用接口回调,让调用该方…

集群服务负载均衡------LVS

个人的理解&#xff0c;以一种通俗易懂的方式讲述出来&#xff0c;如果有哪些地方说的不正确的话&#xff0c;希望大家留言指出来。笔者会非是常的感谢&#xff01; Cluster服务器集群&#xff0c;直接理解为一些单一的服务器的集合通过某种方式组合起来&#xff0c;为客户端提…

Cubieboard2 debian

环境准备 本文所使用的主机环境为kubuntu 12.10&#xff0c;然而一般情况下&#xff0c;下面涉及到的命令对基于Debian的(X)ubuntu系列都应该适用。 为不引起混淆&#xff0c;我们作如下约定&#xff1a; 工作目录为 $WORK_DIR,目标系统 rootfs 目录为 $WORK_DIR/$ROOTFS_DIR命…

linux和python的关系_Python、Linux与我的缘分

是在大二时期&#xff0c;那时候不懂什么技术&#xff0c;所以就选择了 Ubuntu 来学习、 使用&#xff0c; 它好操作、 界面绚丽、 简单易用&#xff0c; 对于我这种 Linux 新手来说知足了。 毕竟没玩过 Linux &#xff0c;知识有限&#xff0c; 玩不转 Linux 的种种配置&#…

linux 磁盘uuid获取

ls -l /dev/disk/by-uuid/总用量 0lrwxrwxrwx 1 root root 10 2012-08-15 09:28 0af9bc87-c3c9-49eb-829e-caf572298cc7 -> http://www.cnblogs.com/sdb1lrwxrwxrwx 1 root root 10 2012-08-15 09:27 3e8b5c85-3f5b-4864-b45e-03ff0073eb5f -> http://www.cnblogs.com/sd…

tomcat jsp导入java_[导入]Tomcat JSP Web 开发中的乱码问题小姐

1. 静态页面的乱码问题文件的编码和浏览器要显示的编码不一致。1) 检查文件原始的编码, 可以用记事本打开, 然后选择另存为来看;2) 给当前页面加入一个指令来建议浏览器用指定的编码来显示文件字符内容.3) 如果系统是英文XP,没装东亚字符集支持, 也会显示乱码.2. JSP 页面的乱码…

编译Mysql 5.5时报do_abi_check错误

下载mysql-5.5.3-m3源码后&#xff0c;执行configure无错误&#xff0c;在make的时候却报: make[2]: *** [do_abi_check] 错误 1<br> make[2]: Leaving directory /tmp/mysql-5.5.3-m3<br> make[1]: *** [abi_check] 错误 2<br> make[1]: Leaving directory …

四大开源分布式存储_ipfs分布式存储行业面临着四大主要风险,你知道是哪些吗?...

为了响应国家号召、推动分布式存储技术落地、防御行业风险&#xff0c;中国分布式存储产业联盟启动&#xff0c;全国从事IPFS以及分布式存储从业者对行业风险及联盟成立的必要性达成了高度共识&#xff0c;目前有36家以上的IPFS分布式存储行业企业填写了联盟申请表。几位国内知…

mathematica打包java_从Mathematica到Java的图像

我试图从Mathematica中获取一张图片.我尝试评估一些使用包中的方法生成图形的Mathematica代码.如果我将代码粘贴到Mathematica Notebook,则会正确生成图形.所以我的问题&#xff1a;如何将这些图形转换为Java ???这是我的示例代码&#xff1a;ml MathLinkFactory.createKer…

pjsua帮助手册(中文)

原文地址 : http://www.pjsip.org/pjsua.htm 介绍 PJSUA是一个开源的命令行SIP用户代理&#xff08;软电话&#xff09;&#xff0c;用PJSIP协议&#xff0c;PJNATH&#xff0c;和PJMEDIA实现。 它虽然只有很简单的命令行界面&#xff0c;但是功能齐全。 SIP功能&#xff1a; 多…

c/c++笔试面试题(4)

c/c笔试面试题&#xff08;4&#xff09; 2007-11-08 16:46 749人阅读 评论(0) 收藏 举报Sony笔试题 1&#xff0e;完成下列程序 * *.*. *..*..*.. *...*...*...*... *....*....*....*....*.... *.....*.....*.....*.....*.....*..... *......*......*......*......*......*...…

js date转成 时间字符串_秋招快要开始了,前端笔试中的坑位-JS隐式转换问题

我们在写笔试题的时候&#xff0c;经常碰到涉及隐式转换的题目&#xff0c;例如"1" 2 obj 1 [] ![] [null] false 和 叫做严格运算符&#xff0c;对象类型指向地址相同或原始类型&#xff08; 数值、字符串、布尔值&#xff09;值相同&#xff1b;叫做相等运算…

Java中快速处理集合_简洁又快速地处理集合——Java8 Stream(上)

作者&#xff1a;Howie_Y&#xff0c;系原创投稿主页&#xff1a;www.jianshu.com/u/79638e5f0743Java 8 发布至今也已经好几年过去&#xff0c;如今 Java 也已经向 11 迈去&#xff0c;但是 Java 8 作出的改变可以说是革命性的&#xff0c;影响足够深远&#xff0c;学习 Java …

FTP服务器和客户端源代码编写问题(ftp server client source)

最近关注FTP程序源代码的朋友非常多&#xff0c;这里简单说明一下。 其实FTP也就是普通的Socket程序&#xff0c;只是需要按照FTP协议(RFC959, 1635?可能我记错了)去做&#xff0c;也就是每个消息有固定的结构的&#xff0c;比如头3个字节必须是200,201,300,400之类的数字表示…

eclipse编译java项目class文件_动态编译 Java 代码以及生成 Jar 文件

导读&#xff1a; 最近在看 Flink 源码的时候发现到一段实用的代码&#xff0c;该代码实现了 java 动态编译以及生成 jar 文件。将其进行改进后可以应用到我们的平台上&#xff0c;实现在平台页面上编写 java 代码语句&#xff0c;提交后由后台进行编译和打成 Jar 包再上传到指…

Android初级开发第七讲--特效和数据传递处理

博客出自&#xff1a;http://blog.csdn.net/liuxian13183&#xff0c;转载注明出处&#xff01; All Rights Reserved ! 大家好&#xff0c;相信大家对iphone上的特效早有耳闻&#xff0c;特效不仅给人以炫丽的感觉&#xff0c;也给人以性能优越的感觉&#xff1b;但万丈高楼平…

java查看日志命令_[Java教程]【Linux】linux查看日志文件内容命令tail、cat、tac、head、echo...

[Java教程]【Linux】linux查看日志文件内容命令tail、cat、tac、head、echo0 2017-11-14 12:00:29linux查看日志文件内容命令tail、cat、tac、head、echotail -f test.log你会看到屏幕不断有内容被打印出来. 这时候中断第一个进程Ctrl-C,---------------------------linux 如何…

pjsip简介1

如果你对SIP/VoIP技术感兴趣,哪希望你不要错过:),如果你对写出堪称优美的Code感兴趣,那么你也不可错过:)这期间我想分析一下一个实际的协议栈的设计到实现的相关技术,算是自己的一个学习经历记录.最初选择这个库做分析的原因很简单,文档齐全:),其它良好的特征则是慢慢发现的:) …