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 相关文章推荐
论坛里点击别人帖子下面的回复,回复标题变成“回复 24# 的帖子”
Jun 14 Javascript
fancybox1.3.1 基于Jquery的插件在IE中图片显示问题
Oct 01 Javascript
JavaScript将数据转换成整数的方法
Jan 04 Javascript
javascript里使用php代码实例
Dec 13 Javascript
详解JavaScript中的事件流和事件处理程序
May 20 Javascript
深入理解React中何时使用箭头函数
Aug 23 Javascript
基于node.js express mvc轻量级框架实践
Sep 14 Javascript
JS实现中文汉字按拼音排序的方法
Oct 09 Javascript
jQuery中内容过滤器简单用法示例
Mar 31 jQuery
详解Jest结合Vue-test-utils使用的初步实践
Jun 27 Javascript
vue使用代理解决请求跨域问题详解
Jul 24 Javascript
javascript对象3个属性特征
Nov 17 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
我常用的几个类
2006/10/09 PHP
Linux平台PHP5.4设置FPM线程数量的方法
2016/11/09 PHP
PHP实现微信提现功能(微信商城)
2019/11/21 PHP
JQuery 应用 JQuery.groupTable.js
2010/12/15 Javascript
JS操作Cookie写入和读取实例代码
2013/10/20 Javascript
jquery通过ajax加载一段文本内容的方法
2015/01/15 Javascript
jQuery使用append在html元素后同时添加多项内容的方法
2015/03/26 Javascript
关于JavaScript限制字数的输入框的那些事
2016/08/14 Javascript
js 判断附件后缀的简单实现方法
2016/10/11 Javascript
使用Promise链式调用解决多个异步回调的问题
2017/01/15 Javascript
JS中绑定事件顺序(事件冒泡与事件捕获区别)
2017/01/24 Javascript
js实现音频控制进度条功能
2017/04/01 Javascript
nodejs socket实现的服务端和客户端功能示例
2017/06/02 NodeJs
JS正则表达式完美实现身份证校验功能
2017/10/18 Javascript
Node.js爬取豆瓣数据实例分析
2018/03/05 Javascript
webpack 静态资源集中输出的方法示例
2018/11/09 Javascript
如何在wxml中直接写js代码(wxs)
2019/11/14 Javascript
[46:38]完美世界DOTA2联赛PWL S2 Magma vs PXG 第三场 11.28
2020/12/02 DOTA
python 全文检索引擎详解
2017/04/25 Python
Php多进程实现代码
2018/05/07 Python
APIStar:一个专为Python3设计的API框架
2018/09/26 Python
Python实现针对json中某个关键字段进行排序操作示例
2018/12/25 Python
python 输出所有大小写字母的方法
2019/01/02 Python
Python中的 enum 模块源码详析
2019/01/09 Python
利用Python实现朋友圈中的九宫格图片效果
2020/09/03 Python
html5新特性与用法大全
2018/09/13 HTML / CSS
存储过程和sql语句的优缺点
2014/07/02 面试题
高职助产应届生自荐信
2013/09/24 职场文书
哈理工毕业生的求职信
2013/12/22 职场文书
公司总经理工作职责管理办法
2014/02/28 职场文书
私人会所最新创业计划书范文
2014/03/24 职场文书
信访工作汇报材料
2014/10/27 职场文书
2014小学二年级班主任工作总结
2014/12/05 职场文书
高中社区服务活动报告
2015/02/05 职场文书
违反纪律检讨书范文
2015/05/07 职场文书
微信小程序基础教程之echart的使用
2021/06/01 Javascript