Storage.js:

注意:此版本实现的存储在符合Web存储标准(ie8及ie8以上的版本与其他主流浏览器)的情况下与session的周期一致,但在页面不关闭的情况下没有过期时间,ie7及以下版本则默认是永久保存,但可以通过预留的方法setMaxAge(Number age)来设置有效期,设置0的话在关闭或刷新页面时会清除缓存。

(function initStorageClass(win){var inherit=function(o){if(o===null || o ===undefined) throw TypeError();if(Object.create) return Object.create(o);var t = typeof o;if(t!=='object'&&t!=='function') throw TypeError();function f(){}f.prototype=o;return new f();};var extend=function(a,b){for ( var key in b) { a[key]=b[key]; }return a;};var defineSubclass=function(superclass,constructor,methods,statics){constructor.prototype=inherit(superclass.prototype);constructor.prototype.constructor=constructor;if(methods) extend(constructor.prototype,methods);if(statics) extend(constructor,statics);return constructor;};Function.prototype.extend=function(constructor,methods,statics){return defineSubclass(this,constructor,methods,statics);};// 创建一个抽象类var AbstractStorage=function AbstractStorage(){throw new Error('Can\'t create abstract class instance');};// 添加抽象类的实例方法(已实现)
    extend(AbstractStorage.prototype,{setItem:function(k,v){k=encodeURIComponent(k);v=encodeURIComponent(v);this.storage.setItem(k,v);return this;},getItem:function(k){k=encodeURIComponent(k);return decodeURIComponent(this.storage.getItem(k));},removeItem:function(k){k=encodeURIComponent(k);this.storage.removeItem(k);return this;},setMaxAge:function(age){ // 为IE的userData版本预留了设置有效期的方法if(isNaN(age)) throw new TypeError('userData\' max-age must be a number,but '+age+' is not a number');if(this.model&&this.model==='userData') {var now=new Date().getTime();var expires=now+age*1000;this.storage.expires=new Date(expires).toUTCString();} else {throw new Error('sessionStorage did\'t support set max-age。');}return this;}});var Storage=null;if(win.Storage) {// 实现了Web存储标准的浏览器Storage=AbstractStorage.extend(function WebStorage(){// IE中实现了Web存储标准的版本,在本地目录下无法使用sessonStorageif(!win.sessionStorage) {throw new Error('local web is can\'t save sessionStorage');}this.model='sessionStorage';// 默认使用sessionStorage,也可以自己传入,model自行修改this.storage=win.sessionStorage;});} else if(win.navigator.appVersion&&win.navigator.appVersion.indexOf('MSIE')>=0){// 不支持web存储标准的IE浏览器(IE11的核心版本已和Netscape统一,IE8以上的支持web存储标准)Storage=(AbstractStorage.extend(function IEStorage(maxAge){this.model='userData';this.maxAge=maxAge;this.storage=(function initUserData(t){var memory = document.createElement('div');memory.style.display='none';//附加userData行为memory.style.behavior='url("#default#userData")';document.appendChild(memory);if(t.maxAge) {// 设置userData有效期,默认永久,单位毫秒var now=new Date().getTime();var expires=now+t.maxAge*1000;memory.expires=new Date(expires).toUTCString();}memory.load('UserDataStorage'); //载入存储的
                    extend(memory,{setItem:function(k,v){this.setAttribute(k,v);this.save('UserDataStorage');return this;},getItem:function(k){return this.getAttribute(k)||null;},removeItem:function(k){this.removeAttribute(k);this.save('UserDataStorage');return this;}});return memory;}(this));}));}win.IStorage=Storage;win.memory=new Storage()||null;// 创建一个实例对象,可以在脚本中直接引用
}(window));

index.html(简单测试):

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="Storage.js"></script>
<script type="text/javascript">window.onload=function(){memory.setItem('test','success');alert(memory.getItem('test'));};
</script>
</head>
<body></body>
</html>

在HTML页面中引用Storage.js文件,可以在宿主环境中直接使用已经生成的实例memory(window.memory)。也可以自己创建一个新实例new IStorage()

memory.setItem('test','success');   // add
alert(memory.getItem('test'));      // select
memory.removeItem('test');          // delete

适用实现了Web存储标准的浏览器(Storage)与IE浏览器(userData),userData的生命周期请自行根据项目进行设置。

转载于:https://www.cnblogs.com/gabin/p/3723892.html

基于'sessionStorage'与'userData'的类session存储相关推荐

  1. php获取sessionstorage,关于PHP session 存储方式的详细介绍

    PHP为sesion的存储提供了三种方式: 文件/ 内存/ 自定义存储,默认是使用文件存储.在访问量大的网站上采用这种方式就不大合适,因为这样会导致大量的输入输出的冗余. 下面介绍一种基于Mysql数 ...

  2. C# redis 分布式session存储

    https://github.com/uliian/SessionExtentionStore 一个基于Redis的Session存储扩展方案,解决ASP.NET中Session的局限性和跨应用程序使 ...

  3. Session 存储方式

    简单来说,Session就是服务器给客户端的一个编号,当一台web服务器运行时,可能 是有多个用户都在浏览这台服务器上的网站,当每个用户首次与这台服务器建立连接时,它就与这个服务器建立了一个Sessi ...

  4. php session存到redis,php Session存储到Redis的方法

    php Session存储到Redis的方法 当然要写先安装php的扩展,可参考这篇文章:Redis及PHP扩展安装修改php.ini的设置 复制代码 代码如下: session.save_handl ...

  5. [安卓] 12、开源一个基于SurfaceView的飞行射击类小游戏

    前言  这款安卓小游戏是基于SurfaceView的飞行射击类游戏,采用Java来写,没有采用游戏引擎,注释详细,条理比较清晰,适合初学者了解游戏状态转化自动机和一些继承与封装的技巧. 效果展示    ...

  6. 从spring-session存储结构探讨session存储方案的演变

    我们知道Spring Session 主要解决了分布式场景下 Session 的共享问题,本文将从 Spring Session 的源码出发,来讨论一些 Session 设计的细节. 一.Spring ...

  7. Flask 框架中 上下文基础理念,包括cookie,session存储方法,requset属性,current_app模块和g模块...

    Flask中上下文,分为请求上下文和应用上下文.既状态留存 ,就是把变量存在某一个地方可以调用 请求上下文:实际就是request和session用法理念,既都是可以存储东西. 应用上下文:既变量共享 ...

  8. 基于品类关系,虚拟类目如何建设?

    小叽导读:类目-属性项-属性值体系(简称CPV)是淘宝建设中非常重要的基石,在商品的发布.管理,以及搜索场景下都大量应用.比如每个商品都有自己的类目.以及属性,而且需要发布在适合自己的类目下,才能够方 ...

  9. php session传数组,php session存储数组

    PHP面试干货 1.进程和线程 进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性.进程和线程的区别在于: 简而言之,一个程序至少有一个进程,一个进程至少有一 ...

最新文章

  1. [导入]CSS: 不換行 寫法
  2. 双重ScrollView,RecyclerView联动实例
  3. android 对象数据库中,解析嵌套的JSON对象,并存储在数据库中的Android
  4. 福利满满 | 天元MegEngine贡献者计划全面启动!
  5. update empty content to text instance - where is B mode changed to D by frame
  6. java word批注_编写Java批注
  7. apt ubuntu 指定ipv4_怎么在ubuntu安装python
  8. 采用Jetty搭建简单的WebApplicationServer
  9. .NET在后置代码中输入JS提示语句(背景不会变白)
  10. 系统目录 linux命令,Linux系统目录和命令介绍
  11. 【一文读懂】Contours Hierarchy ——opencv边界的继承结构,表格的提取,表格孔洞处理,空心形状结构的提取
  12. 给定一个英文字符串,请写一段代码找出这个字符串中首先出现三次的那个英文字符(需要区分大小写)。
  13. python实现规则引擎_规则引擎python
  14. 2016阿里巴巴73款开源产品全向图
  15. 数据防泄密工作企业该如何开展
  16. Word文档插入图片的问题
  17. java-php-python-ssm-兴澜幼儿园管理系统-计算机毕业设计
  18. 英雄榜 此服务器当前正在维护中,《天下3》2021年全新山海经版本“再战黄泉”震撼登场!——网易《天下3》官方网站...
  19. SAMBA 基础及实战
  20. matlab设定坐标轴范围和坐标轴显示

热门文章

  1. 后端技术:Java定时任务的五种创建方式
  2. 【转】VS问题集合,不用也要收藏防止以后使用找不到
  3. 87岁老奶奶用微软自带画图软件绘画 惊艳了世人
  4. Shell 快速入门
  5. 荒岛余生为什么没有打开包裹_您会带到荒岛什么办公桌设置?
  6. hello,你知道获取元素有哪几种方式吗?
  7. quartus FIR仿真笔记
  8. 新服务器安装和配置zabbix的playbook
  9. Javascript:原型模式类继承
  10. 几个想法,有兴趣的可以深入下去