如何封装一个Cookie库
由Cookie详解我们已经了解到了Cookie是为了实现有状态的基于HTTP协议的应用而存在的。一个Cookie的由以下几个部分组成:
//设置cookie的格式和Set-Cookie头中使用的格式一样
document.cookie = "name=value; expires=expiration_time; path=domain_path; domain=domain_name; secure"
//这些参数中,只有cookie的名字和值是必需 的。下面是一个简单的例子。
//需要开一个服务器才能设置成功,本地测试的情况下设置cookie无效
document.cookie = "name=Nicholas";
很显然,JavaScript中读写cookie不是非常直观, 常常需要写一些函数来简化cookie的功能。基本的cookie操作有三种:读取、写入和删除。
关于读取、写入、删除Cookie需要注意哪些情况,可以参考一下这篇文章:聊一聊 cookie。
对于需要同时设置多个参数的情况,我们通常以对象的方式传入这些参数。
如:
default = {
'name': null,
'value': null,
'expires': new Date().getTime() + (1000*60*60*24),//默认Cookie的有效期为1天
'path': '/',
'domain': '',
'secure': false
};
//每个参数的意义可以看之前写的文章
一个完整的cookie操作方法库。
let cookieRender = (function () {
//设置一个Cookie
/**
* 要想修改一个cookie,只需要重新赋值就行,旧的值会被新的值覆盖。
* 但要注意一点,在设置新cookie时,path/domain这几个选项一定要旧cookie 保持一样。
* 否则不会修改旧值,而是添加了一个新的 cookie。
* params options 对象
* name cookie的名字
* value cookie的值
* expires cookie的过期时间,传入毫秒数
* path cookie生效的路径
* domain cookie生效的域
* secure cookie的安全标志
*/
function setValue(options) {//当传入的参数过多时,可以用一个对象的方式传入
let _default = {
'name': null,
'value': null,
'expires': new Date().getTime() + (1000*60*60*24),
'path': '/',
'domain': '',
'secure': false
};
for (let key in options) {
if (options.hasOwnProperty(key)){
_default[key] = options[key];
}
}
document.cookie = _default.name + "=" + escape(_default.value) + "; expires=" + _default.expires + "; path=" + _default.path + "; domain=" + _default.domain;
if (_default['secure']) {
document.cookie += '; secure;';
}
} //获取Cookie
function getValue(name) {
let arr = document.cookie.match(new RegExp("(^| )" + name + "=([^;]*)(;|$)"));
if (arr != null) {
return unescape(arr[2]);
}
return null;
} //删除
/*
* 删除一个cookie 也挺简单,也是重新赋值,
* 只要将这个新cookie的expires 选项设置为一个过去的时间点就行了。
* 但同样要注意,path/domain/这几个选项一定要旧cookie 保持一样。
*/
function removeValue(options) {
let _default = {
name: null,
path: '/',
domain: ''
};
for (key in options) {
if (options.hasOwnProperty(key)) {
_default[key] = options[key];
}
if (this.getValue(_default)) {
document.cokie = _default.name + "= " + ";path=" + _default.path + ";domain=" + _default.domain + ";expires=" + new Date(0);
}
}
} return {
set: setValue,
get: getValue,
remove: removeValue
}
})();
如何封装一个Cookie库的更多相关文章
- 封装一个postMessage库,进行iframe跨域交互
这是近期个人在开发chrome插件时的其中一个小总结.还有很多没有总结出来.因为目前插件还在迭代中,(herry菌插件,用于B站C站),属于个人业余的一个小项目.还有很多功能没有实现,以及还需要再看能 ...
- 封装一个jquery库
现在Javascript库海量,流行的也多,比如jQuery,YUI等,虽然功能强大,但也是不万能的,功能不可能涉及方方面面,自己写一个的JS库是对这些的补充,很多也比较实用,把应用到项目中中去也比较 ...
- 优雅的创建一个JavaScript库
这篇文章的目的是通过演示一个简单的例子来介绍在JS中实例化和定义一个库的正确方法,以优化他人编写或维护自己的JS库. 在我们深入之前,我做了两点假设: 你知道简单的JavaScript或C语言. 你不 ...
- C 封装一个简单二叉树基库
引文 今天分享一个喜欢佩服的伟人,应该算人类文明极大突破者.收藏过一张纸币类型如下 那我们继续科普一段关于他的简介 '高斯有些孤傲,但令人惊奇的是,他春风得意地度过了中产阶级的一生,而 没有遭受到冷 ...
- 使用libzplay库封装一个音频类
装载请说明原地址,谢谢~~ 前两天我已经封装好一个duilib中使用的webkit内核的浏览器控件和一个基于vlc的用于播放视频的视频控件,这两个控件可以分别用在放酷狗播放器的乐库功能和MV ...
- [js高手之路] 跟GhostWu一起封装一个字符串工具库-架构篇(1)
所谓字符串工具库就是利用javascript面向对象的知识封装一个常用的字符串处理方法库,首先给这个库起个名字,好吧就叫ghostwu.js. 看下ghostwu.js的整体架构: ; (functi ...
- 如何优雅的封装一个DOM事件库
1.DOM0级事件和DOM2级事件 DOM 0级事件是元素内的一个私有属性:div.onclick = function () {},对一个私有属性赋值(在该事件上绑定一个方法).由此可知DOM 0级 ...
- C 封装一个通用链表 和 一个简单字符串开发库
引言 这里需要分享的是一个 简单字符串库和 链表的基库,代码也许用到特定技巧.有时候回想一下, 如果我读书的时候有人告诉我这些关于C开发的积淀, 那么会走的多直啊.刚参加工作的时候做桌面开发, 服务是 ...
- Cookie 详解以及实现一个 cookie 操作库
Cookie 详解以及实现一个 cookie 操作库 cookie 在前端有着大量的应用,但有时我们对它还是一知半解.下面来看看它的一些具体的用法 Set-Cookie 服务器通过设置响应头来设置客户 ...
随机推荐
- .Net上传图片压缩质量,不改变尺寸
图片上传有很多情况需要考虑,例如:生成缩略图.压缩尺寸.压缩质量.压缩尺寸质量.添加水印等等常见情况.最近遇到图片质量压缩不改变大小的问题,参考:听浪 #region 图片压缩 /// <sum ...
- JQuery对象函数
1.JQuery对象函数写法格式 简单示例: main代表对象名,main.roleName = (function () { return $('#RoleName').val();})();表示为 ...
- Delphi XE7的安卓程序如何调用JAVA的JAR,使用JAVA的类?
本文使用工具和全部源码下载: http://download.csdn.net/detail/sunylat/8190765 为什么我们要在Delphi XE7的安卓程序调用JAVA的JAR,使用JA ...
- vsftpd服务器配置虚拟用户
添加宿主用户 新建系统用户vsftpd,用户目录为/home/wwwroot, 用户登录终端设为/bin/false(即使之不能登录系统) useradd vsftpd -d /home/wwwroo ...
- JDBC技术(汇聚页)
JDBC代表Java数据库连接(Java Database Connectivity),它是用于Java编程语言和数据库之间的数据库无关连接的标准Java API, 换句话说:JDBC是用于在Java ...
- Comet OJ - Contest #0题解
传送门 菜爆了--总共只有一道题会做的--而且也没有短裙好难过 为啥必须得有手机才能注册账号啊喂--歧视么-- \(A\) 解方程 推一下柿子大概就是 \[x-\sqrt{n}=y+z+2\sqrt{ ...
- jzoj100029
陪审团制度历来是司法研究中的一个热议话题,由于陪审团的成员组成会对案件最终的结果产生巨大的影响,诉讼双方往往围绕陪审团由哪些人组成这一议题激烈争夺. 小 W 提出了一个甲乙双方互相制衡的陪审团成员挑选 ...
- SpringMvc date数据传递处理
1.form表单提交date数据 form表单提交的date数据要在接收的字段上加入@DateTimeFormat注解 @DateTimeFormat(pattern = "yyyy-MM- ...
- jmeter 之 BeanShell PostProcessor跨线程全局变量使用
BeanShell PostProcessor是用户对一些变量的操作,操作方法很灵活,大概原理是通过parameters传回来对象,然后在script中对对象进行操作 场景:从登陆接口中获取token ...
- python基础知识梳理-----1变量,常量,注释
因为公司用的是delphi ,所以自学了一阵delphi,但是随着语言的发展,delphi的前景堪忧啊.辞职以后打算好好学学python,然后找找数据分析和爬虫方面的工作. 记录此贴,仅作学习使用,所 ...