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. 推荐两款国人开发的html前段框架

    1.http://www.h-ui.net/  H-ui前端框架官方网站 2.http://www.builive.com/  BUI是基于JQuery的富客户端UI框架

  2. 基于Quartz.net的远程任务管理系统 二

    紧接着上一篇.上一篇讲了表设计与ADO.Net基本操作.接下来,就来说说怎么动态来添加Job任务及清理过期任务吧. 首先,先理一下思路,做事情要先把思绪理清了,然后下手就快准狠了.下面是我的思路:做一 ...

  3. nginx 托管.net core的service文件

    在 /etc/systemd/system/ 中新建一个服务文件site1.service vim /etc/systemd/system/site1.service [Unit] Descripti ...

  4. linux进程管理(二)

    接上[linux进程管理(一)] 终止进程的工具 kill .killall.pkill 终止一个进程或终止一个正在运行的程序,一般是通过 kill .killall.pkill.xkill 等进行. ...

  5. wpa2破解代码思路(教你写poc)

    前言:此篇关于1.wpa2协议漏洞的产生原因:2.scapy这个数据包库的基础:3.最后讲解代码思路,让你们从伪代码可以直接写成代码展开介绍分享~ 本文作者:i春秋签约作家——kaikaix 1.大家 ...

  6. JAVA数组的遍历和取最值

    1.获取数组中的所有元素,会用到数组的遍历 数组的遍历,通常用for循环. public class ArrayDemo { public static void main(String[] args ...

  7. 【FAQ】tomcat启动jdk版本不一致

    一.tomcat7.exe与startup.bat的区别: 1.这两个都可以启动tomcat,但tomcat7.exe必须安装了服务才能启动,而startup.bat不需要 2.另外一个区别是它们启动 ...

  8. 总结day1 ---- 基础内容学习 ,以及历史了解

    知识目录 一 : python 的发展历史 1. pyhton2 和pyhton3 的区别 二: python的语言分类 三 :变量 四: 常量 五 :注释 六 : 基本数据类型 1 : int 2 ...

  9. Flowportal-BPM——环境配置

    环境配置: 一.控制面板→程序和功能→打开或不关闭Window功能→选择选项 二.控制面板→管理工具→Internet信息服务(IIS)管理器→左侧第一个→ISAPI和CGI限制→全部选为[允许] 三 ...

  10. 利用Android Studio编写 Android上的c与c++程序

    利用Android Studio编写 Android上的c与c++程序 (2017-05-22 19:01:20) 转载▼ 标签: android 分类: Android开发 原文链接: http:/ ...