一个封装了localStorage的增删改查的方法

摘要:
localStorage的添加、删除、修改和检查实际上相对简单。每次判断浏览器是否被禁用都很麻烦;而且没有像COOKIE那样的自动过期时间。从长远来看,其中会有垃圾数据;我们知道,Android系统只支持5M的存储空间,而iPhone是10MB。超过限制后,将提示用户,甚至会报告错误=-1){t=item.match[1];if{continue;}}localStorage.removeItem;}returnlocalStorage.setItem;}resetCache;//$。localStorage=函数{if(!

localStorage的增删改查都其实比较简单,每次需要判断浏览器是否禁用,这挺麻烦的;

而且没有像COOKIE一样的,自动过期时间,长期下去会有垃圾数据在里面;我们知道android的系统只支持5M存储空间,iphone是10MB,一旦超过限制会提示用户,甚至报错。

一、包含一下功能:

1、定时清理localStorage;

2、支持过期时间;

3、检测浏览器是否禁用localStorage;

二、顺便贴一个COOKIE的存取方法,接口类似:

(function($){
    /*
     * $.cookie('name', 'test',{expires: 7});  //设置  
     * 
     * */
    $.cookie = function(name, value, options) {
        if (typeof value != 'undefined') {
                  options = options || {};
                  if (value === null) {
                            value = '';
                            options = $.extend({}, options);
                            options.expires = -1;
                  }
                  var expires = '';
                  if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) {
                            var date;
                            if (typeof options.expires == 'number') {
                                      date = new Date();
                                      date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
                            } else {
                                      date = options.expires;
                            }
                            expires = '; expires=' + date.toUTCString();
                  }
                  var path = options.path ? '; path=' + (options.path) : '';
                  var domain = options.domain ? '; domain=' + (options.domain) : '';
                  var secure = options.secure ? '; secure' : '';
                  document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');
                  return this;
            } else {
                  var cookieValue = null;
                  if (document.cookie && document.cookie != '') {
                            var cookies = document.cookie.split(';');
                            for (var i = 0; i < cookies.length; i++) {
                                  var cookie = cookies[i].trim();
                                  if (cookie.substring(0, name.length + 1) == (name + '=')) {
                                            cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                                            break;
                                  }
                            }
                  }
                  return cookieValue;
        }
    };
    /*
     * 
     * $.localStorage('test') //get
     * $.localStorage('test',123) //set
     * $.localStorage('test',{value:123}) //set
     * $.localStorage('test',{value:123}, 1) //set
     * $.localStorage('test',null) //remove
     * 
     */
    var isCache=true,
        minutes =  1000*60,
        now = Date.now();
    
        try {
              localStorage.setItem('cache','test');
        } catch (e) {
            isCache= false;
        }
    
    resetCache = function(time){//定时清理
        if(!isCache)
            return ;
        var expires, day= minutes*60*24;
        time = time || 0;
        if((expires=localStorage.getItem('_expires')) && expires>now){
            return false;
        }
        
        var len= localStorage.length,item,key,t;
        for(var i=0; i<len; i++){
            key= localStorage.key(i);
            item=localStorage.getItem(key);

            
            if(item && item.indexOf('_expires')!=-1){
                t=item.match(/_expires":(\d+)/)[1];
                if(now<t){
                    continue;
                }
            }
            localStorage.removeItem(key);
        }

        
        return localStorage.setItem('_expires', day*time);
    }
          
    resetCache(60);    //2个月检测一遍

    


    $.localStorage = function(name, value, time) {    
        if(!isCache)
            return false;
        
        
        if (typeof value != 'undefined') {    //set
            
            if(value===null){
                return localStorage.removeItem(name);
            }
            
            if(!isNaN(+time)){
                value = {value: value, _expires : now+time*minutes};
            }
            
            localStorage.setItem(name,JSON.stringify(value));  
            
            return value.value || value;
            
         }else{        //get
                var localValue = null,st,et;
                localValue = localStorage.getItem(name);
                
                    try {
                        localValue = JSON.parse(localValue);
                } catch (e) {
                    return localValue;
                }
                
                if($.isObject(localValue) && (et=localValue._expires) ){
                    if(now > et){
                        localStorage.removeItem(name);
                        localValue=null;
                    }else{
                        localValue =  localValue['value'];
                    }
                }
                 return localValue;
        }
    };
})(Zepto);

免责声明:文章转载自《一个封装了localStorage的增删改查的方法》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Oracle查询优化改写--------------------操作多个表Windows 下openssl安装与配置下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

参考美团、饿了么 &amp;amp;&amp;amp; localStorage

localStorage使用。        为什么要使用 localStorage?       因为在之前的讨论过程中,问题:每次添加一件商品和去掉一个商品都需要发送一个http请求来更新购物车,目的是为了在用户下次登录的时候可以记得购物车里的内容,这样, 如果用户选了之后即使没有付款,但是下次登录的时候仍然一打开页面我们就可以把localStorag...

网站日志流量分析系统之(日志埋点)

一、概述    日志埋点分为客户端和服务器端。参考并转自:https://www.cnblogs.com/hzhuxin/p/11152805.html,如有侵权,请联系删除。)   ①客户端埋点:支持 iOS、安卓、Web/H5、微信小程序,主要用于分析 UV、PV、点击量等基本指标。例:下图是Web端的埋点技术图:       ②服务器日志:采集后端业...

CAS—认证原理

  CAS,Central Authentication Service—中央认证服务,是Yale 大学发起的一个企业级的、开源的项目。旨在为Web应用系统提供一种可靠的SSO解决方式。以下简介SSO,重点介绍CAS认证过程。 一、    SSO简单介绍  1.1   概念   SSO英文全称Single Sign On,是眼下比較流行的服务于企业业务整...

使用Flash上传应该注意的问题。

          使用Flash上传在IE是没问题的,但是在几乎所有的非IE内核浏览器几乎都会遇到一个问题,那就是处理上传的页面或代码无法获取Cookie。不过有趣的事,获取Session是没有问题的。 之前不知道这个bug,害我反反复复弄了好久。在某篇翻译过来的文档找到以下文字:            Cookies and Flash 在Flas...

《网络攻防》实验九:web安全基础实践

本次实验在XX同学的指导下完成 1.实验后回答问题 (1)SQL注入攻击原理,如何防御 SQL注入攻击的基本原理,是从客户端合法接口提交特殊的非法代码,让其注入到服务器端执行业务的SQL中去,进而改变SQL语句的原有逻辑和影响服务器端正常业务的处理。 SQL注入攻击是Web应用中一个重要的安全问题,虽然Java具备较高的安全性,但如果开发人员不注意,也有可...

JS常用知识点(一)

1.js数据类型   基本类型:String、Number、boolean、null、undefined、Symbol   引用类型:Object   null和undefined的区别:undefined表示定义但未赋值。null表示定义并赋值,但值为null,可用于对象的初始化或销毁。   Symbol表示独一无二的值,最大的用法是用来定义对象的唯一属...