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库的更多相关文章

  1. 封装一个postMessage库,进行iframe跨域交互

    这是近期个人在开发chrome插件时的其中一个小总结.还有很多没有总结出来.因为目前插件还在迭代中,(herry菌插件,用于B站C站),属于个人业余的一个小项目.还有很多功能没有实现,以及还需要再看能 ...

  2. 封装一个jquery库

    现在Javascript库海量,流行的也多,比如jQuery,YUI等,虽然功能强大,但也是不万能的,功能不可能涉及方方面面,自己写一个的JS库是对这些的补充,很多也比较实用,把应用到项目中中去也比较 ...

  3. 优雅的创建一个JavaScript库

    这篇文章的目的是通过演示一个简单的例子来介绍在JS中实例化和定义一个库的正确方法,以优化他人编写或维护自己的JS库. 在我们深入之前,我做了两点假设: 你知道简单的JavaScript或C语言. 你不 ...

  4. C 封装一个简单二叉树基库

    引文 今天分享一个喜欢佩服的伟人,应该算人类文明极大突破者.收藏过一张纸币类型如下 那我们继续科普一段关于他的简介 '高斯有些孤傲,但令人惊奇的是,他春风得意地度过了中产阶级的一生,而  没有遭受到冷 ...

  5. 使用libzplay库封装一个音频类

    装载请说明原地址,谢谢~~      前两天我已经封装好一个duilib中使用的webkit内核的浏览器控件和一个基于vlc的用于播放视频的视频控件,这两个控件可以分别用在放酷狗播放器的乐库功能和MV ...

  6. [js高手之路] 跟GhostWu一起封装一个字符串工具库-架构篇(1)

    所谓字符串工具库就是利用javascript面向对象的知识封装一个常用的字符串处理方法库,首先给这个库起个名字,好吧就叫ghostwu.js. 看下ghostwu.js的整体架构: ; (functi ...

  7. 如何优雅的封装一个DOM事件库

    1.DOM0级事件和DOM2级事件 DOM 0级事件是元素内的一个私有属性:div.onclick = function () {},对一个私有属性赋值(在该事件上绑定一个方法).由此可知DOM 0级 ...

  8. C 封装一个通用链表 和 一个简单字符串开发库

    引言 这里需要分享的是一个 简单字符串库和 链表的基库,代码也许用到特定技巧.有时候回想一下, 如果我读书的时候有人告诉我这些关于C开发的积淀, 那么会走的多直啊.刚参加工作的时候做桌面开发, 服务是 ...

  9. Cookie 详解以及实现一个 cookie 操作库

    Cookie 详解以及实现一个 cookie 操作库 cookie 在前端有着大量的应用,但有时我们对它还是一知半解.下面来看看它的一些具体的用法 Set-Cookie 服务器通过设置响应头来设置客户 ...

随机推荐

  1. UVA 11426 GCD - Extreme (II)(欧拉函数打表 + 规律)

    Given the value of N, you will have to find the value of G. The definition of G is given below:Here ...

  2. maven的jar路径、下载路径

    jar路径:在localRepository中填写先要放的位置 下载镜像:添加新的就可以 <mirror> <id>nexus-aliyun</id> <mi ...

  3. 升级到Sharepoint 2013后页面打开速度慢

    这个问题现在有了一些新的发现. 首先,我找到了重现客户那里出现的那个复杂SQL语句的方法.这个现象其实是这样的: 当WebApplication的“List View Threshold” 数量大于 ...

  4. Android Preferences: How to load the default values when the user hasn't used the preferences-screen?

    在启动 preferences 之前,默认值并不能生效.第一次运行程序时候,默认值没生效,然后获取的 preferences 的值就是错误的. 解决办法是在程序开始时加一行代码使默认值生效. Pref ...

  5. 375. 猜数字大小 II leetcode java

    题目: 我们正在玩一个猜数游戏,游戏规则如下: 我从 1 到 n 之间选择一个数字,你来猜我选了哪个数字. 每次你猜错了,我都会告诉你,我选的数字比你的大了或者小了. 然而,当你猜了数字 x 并且猜错 ...

  6. iOS开发常见无法分类的小问题

    iOS去除api过期警告提示

  7. 我编写 33 个 VSCode 扩展的原因以及管理扩展的经验

    简评:使用工具的同时自己创造一些工具或扩展,是一件很棒的事情. 以下"我"指原作者 Fabio 大家好,我叫 Fabio,是一位自学成才的开发人员,热衷于开源和授权.我也喜欢自己制 ...

  8. java爬虫中jsoup的使用

    jsoup可以用来解析HTML的内容,其功能非常强大,它可以向javascript那样直接从网页中提取有用的信息 例如1: 从html字符串中解析数据 //直接从字符串中获取 public stati ...

  9. [转]NSProxy实现AOP方便为ios应用实现异常处理策略

    [转载自:http://blog.csdn.net/yanghua_kobe/article/details/8395535] 前段时间关注过objc实现的AOP,在GitHub找到了其中的两个库:A ...

  10. 用 diff 比较两个 hdfs 文件内容

    diff <(hadoop fs -cat /path/to/file) <(hadoop fs -cat /path/to/file2)