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将页面表格导出为Excel的具体实现
Dec 27 Javascript
JQuery EasyUI 日期控件如何控制日期选择区间
May 05 Javascript
JS+CSS实现模仿浏览器网页字符查找功能的方法
Feb 26 Javascript
js判断复选框是否选中及选中个数的实现代码
May 30 Javascript
Javascript必知必会(四)js类型转换
Jun 08 Javascript
AngularJS extend用法详解及实例代码
Nov 15 Javascript
js学习之----深入理解闭包
Nov 21 Javascript
Bootstrap基本样式学习笔记之表格(2)
Dec 07 Javascript
BootStrap Fileinput插件和Bootstrap table表格插件相结合实现文件上传、预览、提交的导入Excel数据操作步骤
Aug 07 Javascript
JQuery Ajax跨域调用和非跨域调用问题实例分析
Apr 16 jQuery
JS运算符简单用法示例
Jan 19 Javascript
使用JS实现鼠标放上图片进行放大离开实现缩小功能
Jan 27 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读取javascript设置的cookies的代码
2010/04/12 PHP
php生成扇形比例图实例
2013/11/06 PHP
ThinkPHP中pathinfo的访问模式、路径访问模式及URL重写总结
2014/08/23 PHP
php实现图片添加描边字和马赛克的方法
2014/12/10 PHP
基于jquery的弹出提示框始终处于窗口的居中位置(类似于alert弹出框的效果)
2011/09/28 Javascript
window.requestAnimationFrame是什么意思,怎么用
2013/01/13 Javascript
选择器中含有空格在使用示例及注意事项
2013/07/31 Javascript
JS去除数组重复值的五种不同方法
2013/09/06 Javascript
node.js中的http.response.removeHeader方法使用说明
2014/12/14 Javascript
avalonjs实现仿微博的图片拖动特效
2015/05/06 Javascript
jQuery控制frames及frame页面JS的方法
2016/03/08 Javascript
jQuery中的一些常见方法小结(推荐)
2016/06/13 Javascript
node.js中module.exports与exports用法上的区别
2016/09/02 Javascript
jQuery 插件封装的方法
2016/11/16 Javascript
Vue.js教程之axios与网络传输的学习实践
2017/04/29 Javascript
jQuery正则验证注册页面经典实例
2017/06/10 jQuery
基于nodejs+express4.X实现文件下载的实例代码
2017/07/13 NodeJs
react路由配置方式详解
2017/08/07 Javascript
NodeJs操作MongoDB教程之分页功能以及常见问题
2019/04/09 NodeJs
vue使用高德地图点击下钻上浮效果的实现思路
2019/10/12 Javascript
vue 解决data中定义图片相对路径页面不显示的问题
2020/08/13 Javascript
使用JavaScript实现贪吃蛇游戏
2020/09/29 Javascript
Python3中的最大整数和最大浮点数实例
2019/07/09 Python
python networkx 根据图的权重画图实现
2019/07/10 Python
如何利用python给图片添加半透明水印
2019/09/06 Python
在 Jupyter 中重新导入特定的 Python 文件(场景分析)
2019/10/27 Python
使用PDF.JS插件在HTML中预览PDF文件的方法
2018/08/29 HTML / CSS
eBay英国购物网站:eBay.co.uk
2019/06/19 全球购物
Footshop罗马尼亚:最好的运动鞋选择
2019/09/10 全球购物
英国哈罗德园艺:Harrod Horticultural
2020/03/31 全球购物
UNIX命令速查表
2012/03/10 面试题
工作的心得体会
2013/12/31 职场文书
教室标语大全
2014/06/21 职场文书
安全保卫工作竞聘材料
2014/08/25 职场文书
工艺技术员岗位职责
2015/02/04 职场文书
使用nginx配置访问wgcloud的方法
2021/06/26 Servers