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 对话框和状态栏使用说明
Oct 25 Javascript
jQuery UI Dialog 创建友好的弹出对话框实现代码
Apr 12 Javascript
原生js事件的添加和删除的封装
Jul 01 Javascript
jQuery选择器之基本选择器与层次选择器
Mar 03 Javascript
angular ng-repeat数组中的数组实例
Feb 18 Javascript
jQuery实现百度登录框的动态切换效果
Apr 21 jQuery
详解vue使用vue-layer-mobile组件实现toast,loading效果
Aug 31 Javascript
JS/HTML5游戏常用算法之路径搜索算法 随机迷宫算法详解【普里姆算法】
Dec 13 Javascript
详解关于微信setData回调函数中的坑
Feb 18 Javascript
JS实现查找数组中对象的属性值是否存在示例
May 24 Javascript
vue spa应用中的路由缓存问题与解决方案
May 31 Javascript
element-ui 本地化使用教程详解
Oct 28 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巧获服务器端信息
2006/12/06 PHP
基于PHP对XML的操作详解
2013/06/07 PHP
解析PHP中的unset究竟会不会释放内存
2013/07/18 PHP
memcache一致性hash的php实现方法
2015/03/05 PHP
PHP判断json格式是否正确的实现代码
2017/09/20 PHP
Laravel 不同生产环境服务器的判断实践
2019/10/15 PHP
jquery实现图片等比例缩放以及max-width在ie中不兼容解决
2013/03/21 Javascript
js判断滚动条是否已到页面最底部或顶部实例
2014/11/20 Javascript
js计算文本框输入的字符数
2015/10/23 Javascript
JS清除字符串中重复值的实现方法
2016/08/03 Javascript
Bootstrapvalidator校验、校验清除重置的实现代码(推荐)
2016/09/28 Javascript
jQuery事件绑定方法学习总结(推荐)
2016/11/21 Javascript
bootstrapValidator bootstrap-select验证不可用的解决办法
2017/01/11 Javascript
JS+CSS实现网页加载中的动画效果
2017/10/27 Javascript
JS实现留言板功能[楼层效果展示]
2017/12/27 Javascript
Vue2实时监听表单变化的示例讲解
2018/08/30 Javascript
微信小程序实现拖拽功能
2019/09/26 Javascript
基于Vue.js+Nuxt开发自定义弹出层组件
2020/10/09 Javascript
Python记录详细调用堆栈日志的方法
2015/05/05 Python
python自带的http模块详解
2016/11/06 Python
python 生成器生成杨辉三角的方法(必看)
2017/04/10 Python
Python3几个常见问题的处理方法
2019/02/26 Python
Python轻量级web框架bottle使用方法解析
2020/06/13 Python
python 中的9个实用技巧,助你提高开发效率
2020/08/30 Python
ALEX AND ANI:手镯,项链,耳环和更多
2017/04/20 全球购物
意大利大型购物中心:Oliviero.it
2017/10/19 全球购物
英国老牌潮鞋店:Offspring
2019/08/19 全球购物
Crabtree & Evelyn欧盟:豪华洗浴、身体和护发
2021/03/09 全球购物
Linux面试经常问的文件系统操作命令
2015/11/05 面试题
GWT都有什么特性
2016/12/02 面试题
2014年高考决心书
2014/03/11 职场文书
自我管理的活动方案
2014/08/25 职场文书
2015年农村党员干部主题教育活动总结
2015/03/25 职场文书
紫日观后感
2015/06/05 职场文书
小学语文课《掌声》教学反思
2016/03/03 职场文书
Python 用户输入和while循环的操作
2021/05/23 Python