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 数值项目的格式化函数代码
May 14 Javascript
javascript利用初始化数据装配模版的实现代码
Nov 17 Javascript
js substr支持中文截取函数代码(中文是双字节)
Apr 17 Javascript
引用外部脚本时script标签关闭的写法
Jan 20 Javascript
一步一步封装自己的HtmlHelper组件BootstrapHelper(二)
Sep 14 Javascript
微信小程序 常用工具类详解及实例
Feb 15 Javascript
利用imgareaselect辅助后台实现图片上传裁剪
Mar 02 Javascript
AngularJS中下拉框的高级用法示例
Oct 11 Javascript
Node.js使用supervisor进行开发中调试的方法
Mar 26 Javascript
JavaScript制作3D旋转相册
Aug 02 Javascript
vue3.0中使用postcss-pxtorem的具体方法
Nov 20 Javascript
vue+高德地图实现地图搜索及点击定位操作
Sep 09 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 和 MySQL 开发的 8 个技巧
2006/10/09 PHP
PHP中的MYSQL常用函数(php下操作数据库必备)
2010/09/12 PHP
php 定义404页面的实现代码
2012/11/19 PHP
Yii2实现跨mysql数据库关联查询排序功能代码
2017/02/10 PHP
php设计模式之备忘模式分析【星际争霸游戏案例】
2020/03/24 PHP
JavaScript入门教程(7) History历史对象
2009/01/31 Javascript
学习ExtJS fit布局使用说明
2009/10/08 Javascript
JavaScript类型转换方法及需要注意的问题小结(挺全面)
2010/11/11 Javascript
jQuery实现渐变弹出层和弹出菜单的方法
2015/02/20 Javascript
jQuery+PHP星级评分实现方法
2015/10/02 Javascript
jQuery头像裁剪工具jcrop用法实例(附演示与demo源码下载)
2016/01/22 Javascript
JavaScript实现时钟滴答声效果
2017/01/29 Javascript
bootstrap daterangepicker双日历时间段选择控件详解
2017/06/15 Javascript
zTree节点文字过多的处理方法
2017/11/24 Javascript
LayUI表格批量删除方法
2018/08/15 Javascript
详解使用React制作一个模态框
2019/03/14 Javascript
Vue实现验证码功能
2019/12/03 Javascript
Python计算斗牛游戏概率算法实例分析
2017/09/26 Python
详谈pandas中agg函数和apply函数的区别
2018/04/20 Python
Python将list中的string批量转化成int/float的方法
2018/06/26 Python
Python 列表去重去除空字符的例子
2019/07/20 Python
pygame库实现俄罗斯方块小游戏
2019/10/29 Python
python tkinter GUI绘制,以及点击更新显示图片代码
2020/03/14 Python
基于Python绘制美观动态圆环图、饼图
2020/06/03 Python
python实现一个简单RPC框架的示例
2020/10/28 Python
CSS3 animation ? steps 函数详解
2019/08/30 HTML / CSS
四方通行旅游网:台湾订房、出国旅游
2017/09/20 全球购物
澳大利亚小众服装品牌:Maurie & Eve
2018/03/27 全球购物
高三学习决心书
2014/03/11 职场文书
小学生教师节演讲稿
2014/09/03 职场文书
学校组织向国旗敬礼活动方案(中小学适用)
2014/09/27 职场文书
2015年双拥工作总结
2015/04/08 职场文书
盗窃案辩护词
2015/05/21 职场文书
大学三好学生主要事迹范文
2015/11/03 职场文书
正能量励志演讲稿三分钟(范文)
2019/07/11 职场文书
Spring Data JPA的Audit功能审计数据库的变更
2021/06/26 Java/Android