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库 pj介绍
Dec 19 Javascript
js 判断一个元素是否在页面中存在
Dec 27 Javascript
js鼠标单击和双击事件冲突问题的快速解决方法
Jul 11 Javascript
AngularJS 防止页面闪烁的方法
Mar 09 Javascript
JavaScript中使用Async实现异步控制
Aug 15 Javascript
webpack写jquery插件的环境配置
Dec 21 jQuery
微信小程序实现animation动画
Jan 26 Javascript
Angularjs之如何在跨域请求中传输Cookie的方法
Jun 01 Javascript
Vue实现textarea固定输入行数与添加下划线样式的思路详解
Jun 28 Javascript
详解使用mpvue开发github小程序总结
Jul 25 Javascript
node-red File读取好保存实例讲解
Sep 11 Javascript
Vue中keep-alive的两种应用方式
Jul 15 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/14 PHP
10个实用的PHP正则表达式汇总
2014/10/23 PHP
支付宝接口开发集成支付环境小结
2015/03/17 PHP
微信公众号开发之获取位置信息php代码
2018/06/13 PHP
PHP反射学习入门示例
2019/06/14 PHP
PHP二维数组分页2种实现方法解析
2020/07/09 PHP
类似CSDN图片切换效果脚本
2009/09/17 Javascript
js判断鼠标同时离开两个div的思路及代码
2013/05/31 Javascript
js验证电话号码与手机支持+86的正则表达式
2014/01/23 Javascript
微信WeixinJSBridge API使用实例
2015/05/25 Javascript
JavaScript中使用指数方法Math.exp()的简介
2015/06/15 Javascript
JavaScript的MVVM库Vue.js入门学习笔记
2016/05/03 Javascript
如何编写jquery插件
2017/03/29 jQuery
jQuery事件对象的属性和方法详解
2017/09/09 jQuery
Vue中使用vue-i18插件实现多语言切换功能
2018/04/25 Javascript
详解微信小程序回到顶部的两种方式
2019/05/09 Javascript
微信小程序实现圆形进度条动画
2020/11/18 Javascript
Python开发最牛逼的IDE——pycharm
2018/08/01 Python
python Pillow图像处理方法汇总
2019/10/16 Python
python实现小世界网络生成
2019/11/21 Python
python实现二分类的卡方分箱示例
2019/11/22 Python
Python绘图实现显示中文
2019/12/04 Python
python 函数中的参数类型
2020/02/11 Python
Django多数据库配置及逆向生成model教程
2020/03/28 Python
菲律宾购物网站:Lazada菲律宾
2018/04/05 全球购物
美国最值得信赖的宠物药房:Allivet
2019/03/23 全球购物
澳大利亚领先的亚麻品牌:Bed Threads
2019/12/16 全球购物
俄罗斯最大的在线手表商店:Bestwatch.ru
2020/01/11 全球购物
PHP面试题及答案一
2012/06/18 面试题
消防安全汇报材料
2014/02/08 职场文书
工程学毕业生自荐信
2014/06/14 职场文书
医学生自荐信范文
2015/03/05 职场文书
2016年情人节问候语
2015/11/11 职场文书
《为人民服务》教学反思
2016/02/20 职场文书
CSS 实现Chrome标签栏的技巧
2021/08/04 HTML / CSS
Go语言基础函数基本用法及示例详解
2021/11/17 Golang