美文网首页
客户端储存

客户端储存

作者: lhdoeo | 来源:发表于2018-04-01 19:26 被阅读0次

    localStorage和sessionStorage

    实现了“Web存储”的浏览器在Window对象上定义了两个属性:localStorage和sessionStorage。这两个属性都代表同一个storage对象——一个持久化关联数组,使用字符串来索引,存储的值也都是字符串形式的。localStorage和sessionStorage两者的区别在于存储的有效期和作用域不同,以及谁拥有数据的访问权。

    使用localStorage进行存储:

    localStorage.x = 10; //在存储一个数字时,会自动把它转化成字符串
    var x = parseInt(localStorage.x);//获取该值时别忘了类型的转化
    //同样地,存储一个日期类型数据时也要进行编码和解码
    localStorage.lastModify = (new Date()).toLocaleDateString();
    var lastModify = new Date(Date.parse(localStorage.lastModify));
    //使用JSON可以使基本数据类型的编码解码变得方便
    localStorage.data = JSON.stringify(data)
    var data = JSON.parse(localStorage.data)
    

    存储有效期和作用域

    localStorage存储的数据是永久性的,除非可以删除,否则会一直保留在电脑上。
    localStorage的作用域是限定在文档源(document origin)级别的。文档源通过协议、主机名以及端口三者来确定。
    sessionStorage存储的有效期与浏览器标签页是一致的,一旦标签页关闭,则数据也会被删除。
    sessionStorage作用域也是文档源,但是还被限定在窗口中,如果同源的文档在不用的浏览器标签页中,那么他们间是无法共享数据的。

    http://www.example.com
    https://www.example.com
    http:www.example.com:8000
    这些都不是同源的
    

    同源的文档间共享同样的localStorage。

    存储API

    localStorage.setItem("key",value)//存储一个数值,当然可以直接用.访问符存储和读取值
    localStorage.getItem("key")//获取值
    for(var i=0; i<localStorage.length; i++){
      var name = localStorage.key(i)//获取第i对名字
      var value = localStorage.getItem(name);
    }
    localStorage.removeItem("x")//删除
    localStorage.clear("x")//全部删除
    

    为什么最好使用setItem()和getItem()而不用点?
    在将来,如果浏览器完全实现了“Web存储”标准,那像对象和数组类型的值通常都是可变的,因此存储对象要求存储他们的副本,以确保之后任何对这类对象的改变都不影响存储对象。同样的,在获取该对象的时候也要求获取的是该对象的副本,以确保对获取对象的改动不会影响到存储对象

    localStorage.o = {x:1};//存储了一个对象
    localStorage.o.x = 2;//试图修改值
    localStorage.o.x//结果没变
    //如果使用getItem()就不会这么让人困惑
    localSotrage.getItem('o').x = 2
    

    存储事件

    在localStorage和sessionStorage的数据发生改变,浏览器会触发存储事件(但是只有其他可访问该数据的浏览器标签页会收到该事件,改变数据的当前页面是不会触发事件的)。在Window对象中有onstorage这个属性方法,使用方式跟onclick=function(event)一样。
    在传入的事件对象中,有这5个重要的属性:
    1.key 被设置或移除项的键名
    2.newValue
    3.oldValue
    4.storageArea 显示是localStorage还是sessionStorage
    5.url 触发该事件的脚本url

    Cookie

    cookie是指web浏览器存储的少量数据(最多不超过4KB),并且会附带在每次的向服务器发起的HTTP请求中,通过Document对象的cookie属性可以实现cookie操作。
    cookie的有效期跟作用域都是可调的,它默认的有效期跟sessionStorage一样,作用域跟localSotrage一样。

    cookie使用:

    //存储cooike
    document.cookie = "lastModify="+encodeURIComponent(document.lastModified);
    /*cookie的value字符串中不允许出现分号、逗号和空白符,因此存储前可以使用JS的
    全局函数encodeURIComponent对值进行编码,相应的读取cookie值时需要使用
    decodeURIComponent()进行解码。*/
    //max-age属性设置cookie有效期,以秒为单位
    document.cookie = "name="+value+";"+"max-age="+seconds;
    //path属性设置cookie的作用域
    document.cookie = ”path=/“  //表示该页面的cookie对同源的所有页面可见
    //domain属性设置子域间共享
    document.cookie = ”path=/;domain=.example.com"  //则子域.example.com下的所有页面都能访问该cookie
    //读取cookie
    var cookie = document.cookie.split(/\;/);
    

    相关文章

      网友评论

          本文标题:客户端储存

          本文链接:https://www.haomeiwen.com/subject/qpdacftx.html