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 不只是脚本
May 30 Javascript
基于JQuery的6个Tab选项卡插件
Sep 03 Javascript
javascript基础知识大全 便于大家学习,也便于我自己查看
Aug 17 Javascript
JS判断数组中是否有重复值得三种实用方法
Aug 16 Javascript
jquery动态更换设置背景图的方法
Mar 25 Javascript
js的Prototype属性解释及常用方法
May 08 Javascript
JS常用字符串处理方法应用总结
May 22 Javascript
javascript框架设计之框架分类及主要功能
Jun 23 Javascript
js自定义select下拉框美化特效
May 12 Javascript
ionic2屏幕适配实现适配手机、平板等设备的示例代码
Aug 11 Javascript
jQuery实现新闻播报滚动及淡入淡出效果示例
Mar 23 jQuery
prettier自动格式化去换行的实现代码
Aug 25 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 图片上传实现代码 带详细注释
2010/04/29 PHP
比较简单实用的PHP无限分类源码分享(思路不错)
2011/10/13 PHP
php批量删除数据库下指定前缀的表以prefix_为例
2014/08/24 PHP
PHP中的traits简单使用实例
2015/05/13 PHP
PHP处理二进制数据的实现方法
2016/06/13 PHP
php实现推荐功能的简单实例
2019/09/29 PHP
jQuery autocomplate 自扩展插件、自动完成示例代码
2011/03/28 Javascript
为你的网站增加亮点的9款jQuery插件推荐
2011/05/03 Javascript
Three.js源码阅读笔记(Object3D类)
2012/12/27 Javascript
解析Javascript小括号“()”的多义性
2013/12/03 Javascript
超级简单实现JavaScript MVC 样式框架
2015/03/24 Javascript
详解Vue自定义过滤器的实现
2017/01/10 Javascript
javascript 日期相减-在线教程(附代码)
2017/08/17 Javascript
使用localStorage替代cookie做本地存储
2019/09/25 Javascript
python杀死一个线程的方法
2015/09/06 Python
Python中动态检测编码chardet的使用教程
2017/07/06 Python
Python生成器以及应用实例解析
2018/02/08 Python
学生信息管理系统python版
2018/10/17 Python
在django中图片上传的格式校验及大小方法
2019/07/28 Python
用python wxpy管理微信公众号并利用微信获取自己的开源数据
2019/07/30 Python
python字典的setdefault的巧妙用法
2019/08/07 Python
Python爬虫程序架构和运行流程原理解析
2020/03/09 Python
python GUI框架pyqt5 对图片进行流式布局的方法(瀑布流flowlayout)
2020/03/12 Python
Python flask框架端口失效解决方案
2020/06/04 Python
浅谈matplotlib默认字体设置探索
2021/02/03 Python
使用CSS3创建动态菜单效果
2015/07/10 HTML / CSS
上海奥佳笔试题面试题
2016/11/16 面试题
《值日生》教学反思
2014/02/17 职场文书
投资协议书范本
2014/04/21 职场文书
志愿者活动总结
2014/04/28 职场文书
公司募捐倡议书
2014/05/14 职场文书
会计求职信范文
2014/05/24 职场文书
通知函的格式
2015/04/27 职场文书
小王子读书笔记
2015/06/29 职场文书
python 模拟在天空中放风筝的示例代码
2021/04/21 Python
Log4j.properties配置及其使用
2021/08/02 Java/Android