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 相关文章推荐
javascript下给元素添加事件的方法与代码
Aug 13 Javascript
YUI的Tab切换实现代码
Apr 11 Javascript
判断浏览器的javascript版本的代码
Sep 03 Javascript
jQuery学习笔记之jQuery+CSS3的浏览器兼容性
Jan 19 Javascript
JavaScript分秒倒计时器实现方法
Feb 02 Javascript
在JavaScript中处理时间之setMinutes()方法的使用
Jun 11 Javascript
js实现div拖动动画运行轨迹效果代码分享
Aug 27 Javascript
JS实现可点击展开与关闭的左侧广告代码
Sep 02 Javascript
跟我学习javascript的严格模式
Nov 16 Javascript
点评js异步加载的4种方式
Dec 22 Javascript
基于BootStrap环境写jQuery tabs插件
Jul 12 Javascript
jquery.Callbacks的实现详解
Nov 30 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的urlencode()URL编码函数浅析
2011/08/09 PHP
php简单开启gzip压缩方法(zlib.output_compression)
2013/04/13 PHP
php合并js请求的例子
2013/11/01 PHP
php实现给图片加灰色半透明效果的方法
2014/10/20 PHP
Discuz!X中SESSION机制实例详解
2015/09/23 PHP
20款超赞的jQuery插件 Web开发人员必备
2011/02/26 Javascript
jQuery源码中的chunker 正则过滤符分析
2012/07/31 Javascript
express的中间件bodyParser详解
2014/12/04 Javascript
js判断登录与否并确定跳转页面的方法
2015/01/30 Javascript
JS 实现随机验证码功能
2017/02/15 Javascript
利用jquery去掉时光轴头尾部线条的方法实例
2017/06/16 jQuery
bootstrap3-dialog-master模态框使用详解
2017/08/22 Javascript
javaScript手机号码校验工具类PhoneUtils详解
2017/12/08 Javascript
vant实现购物车功能
2020/06/29 Javascript
[51:53]DOTA2-DPC中国联赛 正赛 RNG vs Dragon BO3 第二场 1月24日
2021/03/11 DOTA
python+opencv轮廓检测代码解析
2018/01/05 Python
Python实现通讯录功能
2018/02/22 Python
python使用代理ip访问网站的实例
2018/05/07 Python
Python对接六大主流数据库(只需三步)
2019/07/31 Python
python中time库的实例使用方法
2019/10/31 Python
Pycharm 2020年最新激活码(亲测有效)
2020/09/18 Python
Python 实现OpenCV格式和PIL.Image格式互转
2020/01/09 Python
OpenCV哈里斯(Harris)角点检测的实现
2020/01/15 Python
Python 3.9的到来到底是意味着什么
2020/10/14 Python
领先的钻石和订婚戒指零售商:Diamonds-USA
2016/12/11 全球购物
Linux文件系统类型
2012/02/15 面试题
写一个函数,要求输入一个字符串和一个字符长度,对该字符串进行分隔
2015/07/30 面试题
运动会广播稿80字
2014/01/23 职场文书
感恩母亲节活动方案
2014/03/04 职场文书
质量保证书范本
2014/04/29 职场文书
单位一把手群众路线四风问题整改措施
2014/09/25 职场文书
学校机关党总支领导班子整改工作方案
2014/10/26 职场文书
2015年办公室工作总结范文
2015/03/31 职场文书
2015年人力资源部工作总结
2015/04/30 职场文书
python 如何将两个实数矩阵合并为一个复数矩阵
2021/05/19 Python
mysql如何查询连续记录
2022/05/11 MySQL