• HTML5-本地存储与cookies


    一、H5的几种存储形式

    1、本地存储(localstorage和sessionstorage)

    存储形式:key-->value

    过期策略:localstorage永久存储,不过期,除非手动删除,sessionstorage在重启浏览器、关闭页面或新开页面时失效

    大小限制:每个域名5M

    使用方法:(localstorage与sessionstorage操作相同)

    getItem(读取)、setItem(设置)、removeItem(移除)、key(索引)、clear(清空)

    存储内容:数组、json、图片、脚本、样式等可以序列化为字符串的内容

    //自定义localstorage的过期逻辑
    function set(key,val){
        var curTime=new Date().getTime();
        localStorage.setItem(key,JSON.stringify({data:val,time:curTime}))
    }
    function get(key,exp){
        var data=localStorage.getItem(key);
        var dataObj=JSON.parse(data);
        if(new Date().getTime()-dataObj.time>exp){
            console.log("已过期")
        }else{
            console.log("data="+dataObj.data)
        }
    }

    使用场景:利用本地数据,减少网络传输,弱网高延迟低带宽,尽量数据本地化

    2、离线存储(application cache)

    3、IndexedDB和Web SQL

    二、H5之前

    1、cookies

    优点:几乎所有浏览器都兼容;缺点:是每次请求头信息会带上;大小限制为4k;主Domain污染

    它的属性包括如下

    value  //键值对,如test=hello
    expires //绝对过期时间,如new Date(),所以浏览器都支持
    domain  //限定域名,如www.abc.com
    path    //限定路径,如/index
    max-age //相对失效时间,单位为秒;取代expires,冲突则以max-age为准(IE不支持)
    secure  //协议,不需要指定,当HTTPS通信时自动打开
    HttpOnly//仅用于服务器发送,JS无法读取
    
    document.cookie='test=hello;expires='+new Date(2017,5,1)+';path=/index;domain=www.abc.com;max-age=60*60*24*365;'
    //设置固定过期时间的cookies
    function setCookie(name,value){
        var Days = 30;
        var exp = new Date();
        exp.setTime(exp.getTime() + Days*24*60*60*1000);
        document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString();
    }
    //设置自定义过期时间cookie
    function setCookie(name,value,time){
        var msec = getMsec(time); //获取毫秒
        var exp = new Date();
        exp.setTime(exp.getTime() + msec*1);
        document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString();
    }
    //将字符串时间转换为毫秒,1秒=1000毫秒
    function getMsec(DateStr){
       var timeNum=str.substring(0,str.length-1)*1; //时间数量
       var timeStr=str.substring(str.length-1,str.length); //时间单位前缀,如h表示小时
       if (timeStr=="s"){ //20s表示20秒
            return timeNum*1000;}
       else if (timeStr=="h"){ //12h表示12小时
           return timeNum*60*60*1000;}
       else if (timeStr=="d"){
           return timeNum*24*60*60*1000;} //30d表示30天
    }
    //读取cookies
    function getCookie(name){
        var arr,reg=new RegExp("(^| )"+name+"=([^;]*)(;|$)"); //正则匹配
        if(arr=document.cookie.match(reg)){
          return unescape(arr[2]);
        }
        else{
         return null;
        }
    } 
    //删除cookies
    function delCookie(name){
        var exp = new Date();
        exp.setTime(exp.getTime() - 1);
        var cval=getCookie(name);
        if(cval!=null){
          document.cookie= name + "="+cval+";expires="+exp.toGMTString();
        }
    } 

    2、UserData:(仅IE)

  • 相关阅读:
    Android架构初探
    TinyPNG---一个压缩PNG的神站
    Android添加全屏启动画面
    如何唯一的标识一台Android设备?
    获取Android设备唯一标识码
    Android系统资源图标android.R.drawable
    Android中使用adb访问SQLite的方法
    Java 对字符串数据进行MD5/SHA1哈希散列运算
    关于Android中EditText自动获取焦点并弹出键盘的相关设置
    EditText自动换行显示内容
  • 原文地址:https://www.cnblogs.com/gulei/p/6093701.html
Copyright © 2020-2023  润新知