美文网首页java编程笔记
【js】前端持久化存储 localStorage、session

【js】前端持久化存储 localStorage、session

作者: 爱宝宝n | 来源:发表于2019-04-10 18:11 被阅读10次

    一、cookie

    生命期为只在设置的cookie过期时间之前一直有效,即使窗口或浏览器关闭。 存放数据大小为4K左右 。有个数限制(各浏览器不同),一般不能超过20个。与服务器端通信:每次都会携带在HTTP头中,如果使用cookie保存过多数据会带来性能问题。
    cookie的优点:具有极高的扩展性和可用性
    1.通过良好的编程,控制保存在cookie中的session对象的大小。
    2.通过加密和安全传输技术,减少cookie被破解的可能性。
    3.只有在cookie中存放不敏感的数据,即使被盗取也不会有很大的损失。
    4.控制cookie的生命期,使之不会永远有效。这样的话偷盗者很可能拿到的就 是一个过期的cookie。
    cookie的缺点:
    1.cookie的长度和数量的限制。每个domain最多只能有20条cookie,每个cookie长度不能超过4KB。否则会被截掉。
    2.安全性问题。如果cookie被人拦掉了,那个人就可以获取到所有session信息。加密的话也不起什么作用。
    3.有些状态不可能保存在客户端。例如,为了防止重复提交表单,我们需要在服务端保存一个计数器。若吧计数器保存在客户端,则起不到什么作用。

    二、webstorage是本地存储,存储在客户端,包括localStorage和sessionStorage。

    1.localStorage

    localStorage生命周期是永久,这意味着除非用户显示在浏览器提供的UI上清除localStorage信息,否则这些信息将永远存在。存放数据大小为一般为5MB,而且它仅在客户端(即浏览器)中保存,不参与和服务器的通信。

    2.sessionStorage

    为每一个数据源维持一个存储区域,在浏览器打开期间存在,包括页面重新加载

    api

    sessionStorage 和 localStorage 的用法基本一致,引用类型的值要转换成JSON

    保存数据到本地

    const student= {
            name: 'Lee',
            age: 20,
            id: '001'
        };
        sessionStorage.setItem('token', JSON.stringify(student));
        localStorage.setItem('token', JSON.stringify(student));
    

    从本地存储获取数据

    var data1 = JSON.parse(sessionStorage.getItem('token'));
    var data2 = JSON.parse(localStorage.getItem('token'));
    

    本地存储中删除某个保存的数据

    sessionStorage.removeItem('token');
    localStorage.removeItem('token');
    

    删除所有保存的数据

    sessionStorage.clear();
    localStorage.clear();
    

    作用域不同

    不同浏览器无法共享localStorage或sessionStorage中的信息。相同浏览器的不同页面间可以共享相同的 localStorage(页面属于相同域名和端口),但是不同页面或标签页间无法共享sessionStorage的信息。这里需要注意的是,页面及标 签页仅指顶级窗口,如果一个标签页包含多个iframe标签且他们属于同源页面,那么他们之间是可以共享sessionStorage的。
    localStorage、sessionStorage、Cookie共同点:都是保存在浏览器端,且同源的。

    三、再来说说indexedDB

    在使用一个技术之前,先搞清楚它是什么,这对你的理解很重要,从DB就可以看出,它肯定是一个数据库,而说到数据库,有两种不同类型的数据库,就是关系型数据库和非关系型数据库,关系型数据库如Mysql、Oracle等将数据存储在表中,而非关系型数据库如Redis、MongoDB等将数据集作为个体对象存储。indexedDB就是一个非关系型数据库,它不需要你去写一些特定的sql语句来对数据库进行操作,因为它是nosql的,数据形式使用的是json,
    意义
    也许熟悉前端存储的会说,不是有了LocalStorage和Cookies吗?为什么还要推出indexedDB呢?其实对于在浏览器里存储数据,你可以使用cookies或local storage,但它们都是比较简单的技术,而IndexedDB提供了类似数据库风格的数据存储和使用方式。
    首先说说Cookies,英文直接翻译过来就是小甜点,听起来很好吃,实际上并不是,每次HTTP接受和发送都会传递Cookies数据,它会占用额外的流量。例如,如果你有一个10KB的Cookies数据,发送10次请求,那么,总计就会有100KB的数据在网络上传输。Cookies只能是字符串。浏览器里存储Cookies的空间有限,很多用户禁止浏览器使用Cookies。所以,Cookies只能用来存储小量的非关键的数据。
    其次说说LocalStorage,LocalStorage是用token-value键值模式存储数据,但跟IndexedDB不一样的是,它的数据并不是按对象形式存储。它存储的数据都是字符串形式。如果你想让LocalStorage存储对象,你需要借助JSON.stringify()能将对象变成字符串形式,再用JSON.parse()将字符串还原成对象。但如果要存储大量的复杂的数据,这并不是一种很好的方案。毕竟,localstorage就是专门为小数量数据设计的,所以它的api设计为同步的。而IndexedDB很适合存储大量数据,它的API是异步调用的。IndexedDB使用索引存储数据,各种数据库操作放在事务中执行。IndexedDB甚至还支持简单的数据类型。IndexedDB比localstorage强大得多,但它的API也相对复杂。对于简单的数据,你应该继续使用localstorage,但当你希望存储大量数据时,IndexedDB会明显的更适合,IndexedDB能提供你更为复杂的查询数据的方式。

    indexedDB的特性

    1.对象仓库
    2.事务性
    3.基于请求
    4.异步
    使用
    打开数据库并且开始一个事务。
    创建一个 object store。
    构建一个请求来执行一些数据库操作,像增加或提取数据等。
    通过监听正确类型的 DOM 事件以等待操作完成。
    在操作结果上进行一些操作(可以在 request 对象中找到)

    相关文章

      网友评论

        本文标题:【js】前端持久化存储 localStorage、session

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