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 事件绑定函数代码
Apr 28 Javascript
js三种排序算法分享
Aug 16 Javascript
jquery动画3.创建一个带遮罩效果的图片走廊
Aug 24 Javascript
jQuery中animate()方法用法实例
Dec 24 Javascript
轻松学习jQuery插件EasyUI EasyUI实现树形网络基本操作(2)
Nov 30 Javascript
基于jquery实现省市联动特效
Dec 17 Javascript
修改Jquery Dialog 位置的实现方法
Aug 26 Javascript
一个极为简单的requirejs实现方法
Oct 20 Javascript
vue父组件向子组件动态传值的两种方法
Nov 11 Javascript
对vue.js中this.$emit的深入理解
Feb 23 Javascript
vue组件实现弹出框点击显示隐藏效果
Oct 26 Javascript
Node.js中出现未捕获异常的处理方法
Jun 29 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
2019年漫画销量排行榜:鬼灭登顶 海贼单卷制霸 尾田盛赞鬼灭
2020/03/08 日漫
PHP手机号码归属地查询代码(API接口/mysql)
2012/09/04 PHP
自定义php类(查找/修改)xml文档
2013/03/26 PHP
解析argc argv在php中的应用
2013/06/24 PHP
php防止恶意刷新与刷票的方法
2014/11/21 PHP
CodeIgniter删除和设置Cookie的方法
2015/04/07 PHP
php技巧小结【推荐】
2017/01/19 PHP
网页中的图片的处理方法与代码
2009/11/26 Javascript
让浏览器非阻塞加载javascript的几种方法小结
2011/04/25 Javascript
基于jQuery.Validate验证库知识点的详解
2013/04/26 Javascript
jQuery实现的一个tab切换效果内部还嵌有切换
2014/08/10 Javascript
jQuery前端框架easyui使用Dialog时bug处理
2014/12/05 Javascript
jQuery 3.0 的变化及使用方法
2016/02/01 Javascript
js仿支付宝填写支付密码效果实现多方框输入密码
2016/03/09 Javascript
jQuery实现分页功能(含ajax请求、后台数据、附完整demo)
2017/04/03 jQuery
vue2的todolist入门小项目的详细解析
2017/05/11 Javascript
Vue页面骨架屏注入方法
2018/05/13 Javascript
express 项目分层实践详解
2018/12/10 Javascript
layui动态绑定事件的方法
2019/09/20 Javascript
Node.js开发之套接字(socket)编程入门示例
2019/11/05 Javascript
Bootstrap table 服务器端分页功能实现方法示例
2020/06/01 Javascript
Python写的服务监控程序实例
2015/01/31 Python
python 与GO中操作slice,list的方式实例代码
2017/03/20 Python
python之DataFrame实现excel合并单元格
2021/02/22 Python
Python传递参数的多种方式(小结)
2019/09/18 Python
python统计指定目录内文件的代码行数
2019/09/19 Python
python 插入日期数据到Oracle实例
2020/03/02 Python
Python 实现敏感目录扫描的示例代码
2020/05/21 Python
基于HTML5的WebGL实现json和echarts图表展现在同一个界面
2017/10/26 HTML / CSS
世界上获奖最多的手机镜头:Olloclip
2018/03/03 全球购物
基层干部群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
2014年酒店年度工作总结
2014/12/10 职场文书
2015年会计个人工作总结
2015/04/02 职场文书
庆七一晚会主持词
2015/06/30 职场文书
田径运动会通讯稿
2015/07/18 职场文书
幼儿园卫生保健制度
2015/08/05 职场文书