JavaScript实现基于Cookie的存储类实例


Posted in Javascript onApril 10, 2015

本文实例讲述了JavaScript实现基于Cookie的存储类。分享给大家供大家参考。具体分析如下:

通过这个JS类,你可以象使用session一样使用cookie,非常简单了!

/*
 * CookieStorage.js
 * 本类实现像localStorage和sessionStorage一样的存储API
 * 不同的是,它是基于HTTP Cookies实现的.
 */
function CookieStorage(maxage, path) {
// 两个参数分别代表储存有效期和作用域
 // 获取一个储存全部cookies的对象
 var cookies = (function() {
 // 类型之前介绍的getCookies函数
  var cookies = {};
  // 该对象最终会返回
  var all = document.cookie;
  // 以大字符串的形式获取所有cookies的信息
  if (all === "")
  // 如果该属性为空白符
   return cookies;
   // 返回一个空对象
  var list = all.split("; ");
  // 分离出名/值对
  for(var i = 0; i < list.length; i++) {
  // 遍历每个cookie
   var cookie = list[i];
   var p = cookie.indexOf("=");
   // 找到第一个“=”符号
   var name = cookie.substring(0,p);
   // 获取cookie的名字
   var value = cookie.substring(p+1);
   // 获取cookie对应的值
   value = decodeURIComponent(value);
   // 对其值进行解码
   cookies[name] = value;
   // 将名值对存储到对象中
  }
  return cookies;
 }());
 // 将所有cookie的名字存储到一个数组中
 var keys = [];
 for(var key in cookies) keys.push(key);
 // 现在定义储存API公共的属性和方法
 // 储存的cookies的个数
 this.length = keys.length;
 // 返回第n个cookie的名字,如果n越界则返回null
 this.key = function(n) {
  if (n < 0 || n >= keys.length) return null;
  return keys[n];
 };
 // 返回指定名字的cookie值,如果不存在则返回null
 this.getItem = function(name){
 return cookies[name] || null;
 };
 // 储存cookie值
 this.setItem = function(key, value) {
  if (!(key in cookies)) {
  // 如果要促成的cookie还不存在
   keys.push(key);
   // 将指定的名字加入到储存所有cookie名的数组中
   this.length++;
   // cookies个数加一
  }
  // 将该名/值对数据存储到cookie对象中.
  cookies[key] = value;
  // 开始正式设置cookie.
  // 首先将要储存的cookie的值进行编码
  // 同时创建一个“名称=编码后的值”形式的字符串
  var cookie = key + "=" + encodeURIComponent(value);
  // 将cookie的属性也加入到该字符串中
  if (maxage) cookie += "; max-age=" + maxage;
  if (path) cookie += "; path=" + path;
  // 通过document.cookie属性来设置cookie
  document.cookie = cookie;
 };
 // 删除指定的cookie
 this.removeItem = function(key) {
  if (!(key in cookies)) return;
  // 如果cookie不存在,则什么也不做
  // 从内部维护的cookies组删除指定的cookie
  delete cookies[key];
  // 同时将cookie中的名字也在内部的数组中删除.
  // 如果使用ES5定义的数组indexOf()方法会更加简单.
  for(var i = 0; i < keys.length; i++) {
  // 遍历所有的名字
   if (keys[i] === key) { 
   // 当我们找到了要找的那个
    keys.splice(i,1); 
 // 将它从数组中删除.
    break;
   }
  }
  this.length--; 
  // cookies个数减一
  // 最终通过将该cookie的值设置为空字符串
  //以及将有效期设置为0来删除指定的cookie.
  document.cookie = key + "=; max-age=0";
 };
 // 删除所有的cookies
 this.clear = function() {
  // 循环所有的cookies的名字,并将cookies删除
  for(var i = 0; i < keys.length; i++)
   document.cookie = keys[i] + "=; max-age=0";
  // 重置所有的内部状态
  cookies = {};
  keys = [];
  this.length = 0;
 };
}

希望本文所述对大家的javascript程序设计有所帮助。

Javascript 相关文章推荐
js 跨域和ajax 跨域问题小结
Jul 01 Javascript
javascript 自定义事件初探
Aug 21 Javascript
JQuery中getJSON的使用方法
Dec 13 Javascript
自己使用js/jquery写的一个定制对话框控件
May 02 Javascript
js换图片效果可进行定时操作
Jun 09 Javascript
jQuery中:image选择器用法实例
Jan 03 Javascript
谈谈target=_new和_blank的不同之处
Oct 25 Javascript
AngularJS指令与控制器之间的交互功能示例
Dec 14 Javascript
AngularJs定时器$interval 和 $timeout详解
May 25 Javascript
基于vue-cli vue-router搭建底部导航栏移动前端项目
Feb 28 Javascript
详解用JS添加和删除class类名
Mar 25 Javascript
浅谈vue限制文本框输入数字的正确姿势
Sep 02 Javascript
JavaScript 变量、作用域及内存
Apr 08 #Javascript
JavaScript Function函数类型介绍
Apr 08 #Javascript
JavaScript 模块化编程(笔记)
Apr 08 #Javascript
JavaScript DOM事件(笔记)
Apr 08 #Javascript
javascript笛卡尔积算法实现方法
Apr 08 #Javascript
JavaScript获取指定元素位置的方法
Apr 08 #Javascript
javascript跨域原因以及解决方案分享
Apr 08 #Javascript
You might like
PHP daddslashes 使用方法介绍
2012/10/26 PHP
帝国CMS留言板回复后发送EMAIL通知客户
2015/07/06 PHP
学习php设计模式 php实现合成模式(composite)
2015/12/08 PHP
jQuery 学习第七课 扩展jQuery的功能 插件开发
2010/05/17 Javascript
JavaScript 原型继承之构造函数继承
2011/08/26 Javascript
jQuery中setTimeout的几种使用方法小结
2013/04/07 Javascript
js showModalDialog参数的使用详解
2014/01/07 Javascript
jquery实现的图片点击滚动效果
2014/04/29 Javascript
JavaScript实现弹出DIV层同时页面背景渐变成半透明效果
2016/03/25 Javascript
jQuery实现表格行和列的动态添加与删除方法【测试可用】
2016/08/01 Javascript
详解Angular 4 表单快速入门
2017/06/05 Javascript
一个简易的js图片轮播效果
2017/07/22 Javascript
详解Angular路由之路由守卫
2018/05/10 Javascript
vue实现点击当前标签高亮效果【推荐】
2018/06/22 Javascript
JavaScript实现的前端AES加密解密功能【基于CryptoJS】
2018/08/28 Javascript
JavaScript寄生组合式继承原理与用法分析
2019/01/11 Javascript
微信小程序云开发修改云数据库中的数据方法
2019/05/18 Javascript
JS中getElementsByClassName与classList兼容性问题解决方案分析
2019/08/07 Javascript
解决vue 使用setTimeout,离开当前路由setTimeout未销毁的问题
2020/07/21 Javascript
javascript运行机制之执行顺序理解
2020/08/03 Javascript
vue el-upload上传文件的示例代码
2020/12/21 Vue.js
[02:15]2014DOTA2国际邀请赛 赛后退役选手回顾
2014/08/01 DOTA
将图片文件嵌入到wxpython代码中的实现方法
2014/08/11 Python
Python实现简单网页图片抓取完整代码实例
2017/12/15 Python
浅谈Python接口对json串的处理方法
2018/12/19 Python
关于Python作用域自学总结
2019/06/10 Python
使用OpenCV实现仿射变换—旋转功能
2019/08/29 Python
python中文分词库jieba使用方法详解
2020/02/11 Python
基于CSS3特效之动画:animation的应用
2013/05/09 HTML / CSS
详解HTML5中的picture元素响应式处理图片
2018/01/03 HTML / CSS
简洁自适应404页面HTML好看的404源码
2020/12/16 HTML / CSS
Ticketmaster德国票务网站:购买音乐会和体育等门票
2016/11/14 全球购物
老公保证书
2015/01/17 职场文书
商超业务员岗位职责
2015/02/13 职场文书
2015年大学宣传部工作总结
2015/05/26 职场文书
2016年度基层党建工作公开承诺书
2016/03/25 职场文书