zoukankan      html  css  js  c++  java
  • cookie、localStorage、sessionStorage初步的学习

    js有三种数据存储方式

    1. sessionStorage
    2. localStorage
    3. cookie

    sessionStroage

    sessionStroage是HTML5新增的一个回话存储对象,用于临时保持同一窗口的数据,窗口关闭数据也将删除
    存储单个变量:

    存储数据: sessionStroage.setItem('name', 'Tiboo')  
    读取数据: sessionStroage.getItem('name')
    

    存储JSON对象:

    info = {
       name: 'Tiboo',
       number: '1204914',
       guid: '00123'
    }
    存储值: 将对象转换为JSON字符串
    sessionStroage.setItem('info', JSON.stringify(info));
    读取值: 将JSON字符串转换为对象
    let infoData = JSON.parse(sessionStroage.getItem('info'))
    

    localStroage

    localStroage是HTML5新增特性,本地存储,同时不受时间限制的数据存储,localStorage中一般浏览器支持的是5M大小
    存储单个变量:

    存储数据: localStroage.setItem('name', 'Tiboo')
    读取数据: localStroage.getItem('name')
    

    存储JSON对象:

    info = {
       name: 'Tiboo',
       number: '1204914',
       guid: '00123'
    }
    存储值: 将对象转换为JSON字符串
    localStroage.setItem('info', JSON.stringify(info));
    读取值: 将JSON字符串转换为对象
    let infoData = JSON.parse(localStroage.getItem('info'))
    

    删除单个数据:

    localStorage.removeItem('info');
    

    删除所有数据:

    localStorage.clear()
    

    由于localStorage中一般浏览器支持的是5M大小,故当缓存中数据大于5M时,出现不存储数据,也不会覆盖现有数据,并且引发QUTA_EXCEEDED_ERR异常,故可以通过异常来强制清除缓存,如下所示

    try {
       localStorage.setItem('info', JSON.stringify(info));
      } catch (e) {
         //存储满了,全部删除
         localStorage.clear();
         localStorage.setItem('info', JSON.stringify(info));
    }
    
    

    cookie用于存储web页面的用户信息,当用户访问web页面时,他的名字可以记录在cookie中,在用户下一次访问该页面时,可以在cookie中读取用户访问记录,cookie中每条cookie的存储空间为4k
    创建cookie

     this.setCookie('b2bPartnerId', partnerId)
     // 设置过期时间为30天
     setCookie(name, value) { 
       let Days = 30; 
       let exp = new Date(); 
       exp.setTime(exp.getTime() + Days * 24 * 60 * 60 * 1000); 
       document.cookie = name + '=' + escape(value) + ';expires=' + exp.toGMTString(); 
     },
    

    读取cookie

    let partnerId = this.getCookie('b2bPartnerId')
    getCookie(name) { 
      let arr,
        reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)');
      arr = document.cookie.match(reg)
      if (arr) {
        if (arr.length) {
          return unescape(arr[2]); 
        } else {
          return null; 
        }
      } else {
        return null;
      }
    },
    

    相同与不同点

    相同点:都保存在浏览器端,同源的
    不同点:

    • 传递方式不同
      • cookie数据始终在同源的http请求中携带(即使不需要),即cookie在浏览器和服务器间来回传递
      • sessionStorage和localStorage不会自动把数据发给服务器,仅在本地保存
    • 数据大小不同
      • cookie数据还有路径(path)的概念,可以限制cookie只属于某个路径下
      • 存储大小限制也不同,cookie数据不能超过4k,同时因为每次http请求都会携带cookie,所以cookie只适合保存很小的数据,如会话标识
      • sessionStorage和localStorage 虽然也有存储大小的限制,但比cookie大得多,可以达到5M或更大
    • 数据有效期不同
      • sessionStorage:仅在当前浏览器窗口关闭前有效,自然也就不可能持久保持
      • localStorage:始终有效,窗口或浏览器关闭也一直保存,因此用作持久数据
      • cookie只在设置的cookie过期时间之前一直有效,即使窗口或浏览器关闭
    • 作用域不同
      • sessionStorage不在不同的浏览器窗口中共享,即使是同一个页面
      • localStorage 在所有同源窗口中都是共享的
      • cookie也是在所有同源窗口中都是共享的
      • Web Storage 支持事件通知机制,可以将数据更新的通知发送给监听者
      • Web Storage 的 api 接口使用更方便
  • 相关阅读:
    08-12 NOIP模拟测试18
    08-09 NOIP模拟测试15
    08-11 NOIP模拟测试17
    08-10 NOIP模拟测试16
    08-07 NOIP模拟测试14
    08-03 NOIP模拟测试12
    [SDOI2011]拦截导弹
    08-01 NOIP模拟测试11
    零散知识点
    07-29 NOIP模拟测试10
  • 原文地址:https://www.cnblogs.com/my466879168/p/12506136.html
Copyright © 2011-2022 走看看