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 相关文章推荐
jqgrid 简单学习笔记
May 03 Javascript
对javascript的一点点认识总结《javascript高级程序设计》读书笔记
Nov 30 Javascript
再谈javascript面向对象编程
Mar 18 Javascript
使用JQuery和CSS模拟超链接的用户单击事件的实现代码
May 23 Javascript
JavaScript高级程序设计(第3版)学习笔记8 js函数(中)
Oct 11 Javascript
JS将秒换成时分秒实现代码
Sep 03 Javascript
javascript实现左右控制无缝滚动
Dec 31 Javascript
jQuery通过写入cookie实现更换网页背景的方法
Apr 15 Javascript
Javascript的比较汇总
Jul 25 Javascript
原生JS与JQ获取元素的区别详解
Feb 13 Javascript
微信小程序开发打开另一个小程序的实现方法
May 17 Javascript
Vue+Bootstrap实现简易学生管理系统
Feb 09 Vue.js
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 debug 安装技巧
2011/04/30 PHP
CodeIgniter基于Email类发邮件的方法
2016/03/29 PHP
PHP常用函数之根据生日计算年龄功能示例
2019/10/21 PHP
php使用redis的有序集合zset实现延迟队列应用示例
2020/02/20 PHP
PHP中关于php.ini参数优化详解
2020/02/28 PHP
IE中createElement需要注意的一个问题
2010/07/13 Javascript
node.js中的http.response.writeHead方法使用说明
2014/12/14 Javascript
js编写贪吃蛇的小游戏
2020/08/24 Javascript
Winform客户端向web地址传参接收参数的方法
2016/05/17 Javascript
jQuery数组处理函数整理
2016/08/03 Javascript
JavaScript探测CSS动画是否已经完成的方法
2016/08/30 Javascript
火狐和ie下获取javascript 获取event的方法(推荐)
2016/11/26 Javascript
基于vuejs实现一个todolist项目
2017/04/11 Javascript
详解React-Native全球化多语言切换工具库react-native-i18n
2017/11/03 Javascript
JS实现图片转换成base64的各种应用场景实例分析
2018/06/22 Javascript
angular异步验证防抖踩坑实录
2019/12/01 Javascript
[05:39]2014DOTA2西雅图国际邀请赛 淘汰赛7月14日TOPPLAY
2014/07/14 DOTA
[41:17]VG vs Optic 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
python fabric实现远程操作和部署示例
2014/03/25 Python
python实现颜色rgb和hex相互转换的函数
2015/03/19 Python
Django中URL视图函数的一些高级概念介绍
2015/07/20 Python
如何使用七牛Python SDK写一个同步脚本及使用教程
2015/08/23 Python
Python常见异常分类与处理方法
2017/06/04 Python
Python插件virtualenv搭建虚拟环境
2017/11/20 Python
微信跳一跳游戏python脚本
2020/04/01 Python
Python使用sklearn实现的各种回归算法示例
2019/07/04 Python
python 实现单通道转3通道
2019/12/03 Python
Pytorch.nn.conv2d 过程验证方式(单,多通道卷积过程)
2020/01/03 Python
Python用摘要算法生成token及检验token的示例代码
2020/12/01 Python
python中用ggplot绘制画图实例讲解
2021/01/26 Python
使用CSS3制作饼状旋转载入效果的实例
2015/06/23 HTML / CSS
法国足球商店:Footcenter
2019/07/06 全球购物
2014年市场部工作总结
2014/11/25 职场文书
初二数学教学反思
2016/02/17 职场文书
小学六一儿童节活动开幕词
2016/03/04 职场文书
插件导致ECharts被全量引入的坑示例解析
2022/09/23 Javascript