如何封装一个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 服务器通过设置响应头来设置客户 ...
随机推荐
- C# 依赖注入 & MEF
之前面试有问道依赖注入,因为一直是做客户端的发开发,没有接触这个,后边工作接触到了MEF,顺便熟悉一下依赖注入 详细的概念解释就不讲了,网上一大把,个人觉着依赖注入本质是为了解耦,方便扩展 依赖注入的 ...
- iOS UIText 或 UILabel 显示 HTML 并正确选用编码
有的时候我们可能会选用 UIText 或 UILabel 来显示 HTML 代格式的文字. NSAttributedString *html = [[NSAttributedString alloc] ...
- 基于JSP的在线考试系统-JavaWeb项目-有源码
开发工具:Myeclipse/Eclipse + MySQL + Tomcat 系统简介: 网络考试系统主要用于实现高校在线考试,基本功能包括:自动组卷.试卷发布.试卷批阅.试卷成绩统计等.本系统结构 ...
- 七、linux目录结构知识---实战
1.企业面试题:一个100M的磁盘分区,分别写入1k文件,及写入1M的文件,分别可以写多少个? 一块磁盘被分区格式化成系统文件后,有Inode和Block:一个文件一般占用一个Inode和一个Bloc ...
- 【Oracle 12c】CUUG OCP认证071考试原题解析(30)
30.choose the best answer Examine the commands used to create DEPARTMENT_DETAILS and COURSE_DETAILS: ...
- js加密解密 base64
<!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title> ...
- Mac上使用oh-my-zsh+iterm2
一.安装oh-my-zsh插件 1.1 下载 git clone git://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh 1.2创建新配置 如 ...
- jquery源码解析:addClass,toggleClass,hasClass详解
这一课,我们将继续讲解jQuery对元素属性操作的方法. 首先,我们先看一下这几个方法是如何使用的: $("#div1").addClass("box1 box2&quo ...
- jquery源码解析:jQuery数据缓存机制详解1
jQuery中有三种添加数据的方法,$().attr(),$().prop(),$().data().但是前面两种是用来在元素上添加属性值的,只适合少量的数据,比如:title,class,name等 ...
- Python Socket 编程示例 Echo Server
简评:我们已经从「Python Socket 编程概览」了解了 socket API 的概述以及客户端和服务器的通信方式,接下来让我们创建第一个客户端和服务器,我们将从一个简单的实现开始,服务器将简单 ...