1、webstorage
本地存储,存储在客户端,包括localStorage和sessionStorage。
(1)localStorage:生命周期是永久,这意味着除非用户显示在浏览器提供的UI上清除localStorage信息,否则这些信息将永远存在。存放数据大小为一般为5MB,而且它仅在客户端(即浏览器)中保存,不参与和服务器的通信。
(2)sessionStorage:仅在当前会话下有效,关闭页面或浏览器后被清除。存放数据大小为一般为5MB,而且它仅在客户端(即浏览器)中保存,不参与和服务器的通信。源生接口可以接受,亦可再次封装来对Object和Array有更好的支持。
(3)localStorage和sessionStorage使用时使用相同的API:
localStorage.setItem("key","value");//以“key”为名称存储一个值“value”
localStorage.getItem("key");//获取名称为“key”的值
localStorage.removeItem("key");//删除名称为“key”的信息。
localStorage.clear();​//清空localStorage中所有信息
 
2、Cookie

生命期为只在设置的cookie过期时间之前一直有效,即使窗口或浏览器关闭。 存放数据大小为4K左右 。有个数限制(各浏览器不同),一般不能超过20个。与服务器端通信:每次都会携带在HTTP头中,如果使用cookie保存过多数据会带来性能问题。但Cookie需要程序员自己封装,源生的Cookie接口不友好(http://www.jb51.net/article/6...)。
(1)cookie的优点:具有极高的扩展性和可用性
1.通过良好的编程,控制保存在cookie中的session对象的大小。
2.通过加密和安全传输技术,减少cookie被破解的可能性。
3.只有在cookie中存放不敏感的数据,即使被盗取也不会有很大的损失。
4.控制cookie的生命期,使之不会永远有效。这样的话偷盗者很可能拿到的就 是一个过期的cookie。
(2)cookie的缺点:
1.cookie的长度和数量的限制。每个domain最多只能有20条cookie,每个cookie长度不能超过4KB。否则会被截掉。
2.安全性问题。如果cookie被人拦掉了,那个人就可以获取到所有session信息。加密的话也不起什么作用。
3.有些状态不可能保存在客户端。例如,为了防止重复提交表单,我们需要在服务端保存一个计数器。若吧计数器保存在客户端,则起不到什么作用。
4. 针对网站(协议 域名 端口)而言 ,把一些数据存放在该网站的打开的浏览器的文件夹下面的
(3)使用方法:
1.里面的名称是唯一的 存放的时候如果名称不在就新增一个 如果在就更新该名称所对应的内容
2.增加 删除 修改 利用的key的唯一性
3.cookie的完整存储形式:键=值;expires=失效时间;domain=域名访问;
4.cookie的限制:Chrome和Safari没有对cookie的个数做限制,一般浏览器限制同一域名数量为50个,cookie文件的总大小一般为4KB(同一个域名)
5.一次创建多个cookie:可以使用 “&”进行分割。在cookie 的名或值中不能有:分号(;)、逗号(,)、等号(=)以及空格
6.对于中文怎么办
中文编码问题,使用encodeURIComponent('xxxxx')编码,再使用decodeURIComponent(document.cookie)解码,能解决中文乱码问题
给document.cookie赋值,并不会覆盖原来的值,除非键是一样的。 如:      document.cookie=“userId=007”;       document.cookie=“userName=江民";
是给cookie中增加了两对键值对。
 7.cookie的域名问题(指定可访问cookie的主机名 ):必须在绑定域名的服务器上才可以设置域名,并且只能设置绑定的域名,也就是说,不同服务器间的cookie文件不共享
8.document.cookie = key + "=" + value + ";expires=" + date + ";path=/" + ";domain=" + yuming
 
3、作用域不同
不同浏览器无法共享localStorage或sessionStorage中的信息。相同浏览器的不同页面间可以共享相同的 localStorage(页面属于相同域名和端口),但是不同页面或标签页间无法共享sessionStorage的信息。这里需要注意的是,页面及标 签页仅指顶级窗口,如果一个标签页包含多个iframe标签且他们属于同源页面,那么他们之间是可以共享sessionStorage的。
 
4、函数封装
(1)获取指定cookie值
 @param name {string} cookie名称
 
function getCookie (name)  {
  var value = null;
  if (name != null) {
  let v = new RegExp("(?:^|; )" + name + "=([^;]*)").exec(document.cookie);
  value = v? decodeURIComponent(v[1]) : null;
  }
  return value;
}
 
(2)设置cookie
@param cookieName {string} cookie名称
@param cookieValue {string} cookie值
@param outTime {number} 过期时间,单位是秒
@param path {string} cookie的作用域
@param domain {string} cookie的作用域
 
function setCookie (cookieName, cookieValue, outTime, attribute) {
  try {
    let str = cookieName + '=' + encodeURIComponent(cookieValue); // 编码以适合任何浏览器
    if (outTime) {
      let mm = outTime * 1000;
      let date = new Date();
      date.setTime(date.getTime() + mm);
      str += ';expires=' + date.toGMTString();
    }
    if (attribute && attribute.domain) {
      str += ';domain=' + attribute.domain;
    }
      let path = (attribute && attribute.path) || '/';
      str += ';path=' + path;
      document.cookie = str;
  } catch (a) {
    console.log(a);
  }
}
function setCookieForAdmin (cookieName, cookieValue, outTime)  {
  let domain = null;
  if (/console.yilule.com/.test(location.host)) {
    domain = '.console.yilule.com'
  }
  setCookie(cookieName, cookieValue, outTime, { domain: domain })
}
 
(3)sessionStore存储数据,
如果浏览器不支持sessionstore则存储到cookie中,过期时间是cookie的默认时间,浏览器关闭即失效
@param key {string} 名称
@param value {string} 值
 
function setSessionStore  (key, value) {
  if (!key) {
    console.log('键值不能为空')
    return false;
  }
  if (window.sessionStorage) {
    try {
      window.sessionStorage.setItem(key, value);
    } catch (e) {
      setCookie(key, value);
    }
  } else {
    setCookie(key, value);
  }
}
 
(4) 获取sessionsrore中存储的值。
 如果浏览器不支持sessionstore则从cookie中获取
@param key {string} 名称
 
function getSessionStore  (key)  {
  let value = null;
  if (!key) {
    return value;
   }
  if (window.sessionStorage) {
    value = window.sessionStorage.getItem(key);
    if (!value) {
      value = getCookie(key);
    }
  } else {
    value = getCookie(key);
  }
   return value;
}
 
(5) 清除sessionStore指定数据
@param key {string} 名称
 
function clearSessionStore (key)  {
  if (window.sessionStorage) {
    try {
      window.sessionStorage.removeItem(key);
    } catch (e) {
      setCookie(key, "", -1);
    }
  } else {
    setCookie(key, "", -1);
  }
}
 
(6) localStore存储数据,
localStore存储数据,过期时间是cookie的默认时间,浏览器关闭即失效
@param key {string} 名称
@param value {string} 值
 
function setLocalStore (key, value) {
  if (window.localStorage) {
    try {
      window.localStorage.setItem(key, value);
    } catch (e) {
      setCookie(key, value);
    }
  } else {
    setCookie(key, value);
  }
}
 
(7) localStore存储数据。
localStore存储数据则从cookie中获取
@param key {string} 名称
 
function getLocalStore  (key) {
  let value = null;
  if (window.localStorage) {
    try {
      value = window.localStorage.getItem(key);
      if (!value) {
        value = getCookie(key);
      }
    } catch (e) {
      value = getCookie(key);
    }
  } else {
    value = getCookie(key);
  }
    return value;
}
 
(8) 清除localStore指定数据
@param key {string} 名称
 
function clearLocalStore (key) {
  if (window.localStorage) {
    try {
      window.localStorage.removeItem(key);
    } catch (e) {
    setCookie(key, "", -1);
    }
  } else {
    setCookie(key, "", -1);
  }
}
 
(9)清除localCookie指定数据
@param key {string} 名称
 
function clearCookie  (key) {
  if (/console.yilule.com/.test(location.host)) {
    setCookieForAdmin(key, "", -1);
  } else {
    setCookie(key, "", -1);
  }
}
 
(10) 清除localCookie指定数据
 @param key {string} 名称
 
function clearCookieWireless  (key) {
  if (/16le.com/.test(location.host)) {
    setCookie(key, "", -1, { domain: ".16le.com" });
  } else if (/yilule.com/.test(location.host)) {
    setCookie(key, "", -1, { domain: ".yilule.com" });
  } else {
    setCookie(key, "", -1);
}
}
 
5、简单版
设置cookie
function setCookie(key, value, days) {
  var date = new Date();
  date.setDate(date.getDate() + days);
  document.cookie = key + "=" + value + ";expires=" + date;
}
 
function setCookie(key, value, days) {
  var date = new Date();
  if (days) { //时间有值 就设置过期时间
    date.setDate(date.getDate() + days);
    document.cookie = key + "=" + value + ";expires=" + date;
  } else {
    document.cookie = key + "=" + value;
  } 
}
 
function setCookie(key, value, days, path){
  path = path || "/";
  var date = new Date();
  if(days){
    date.setDate(date.getDate()+days);
    document.cookie = key +"="+value+";expires="date+";path="path;
  }else{
    document.cookie = key + "=" +value+";path="path;
  }
}
 
function setCookie(key, value, days, path) {
  path = path || "/";
  var date = new Date();
  if (days) {
    date.setDate(date.getDate() + days);
    document.cookie = key + "=" + encodeURIComponent(value) + ";expires=" + date + ";path=" + path;
  } else {
    document.cookie = key + "=" + encodeURIComponent(value) + ";path=" + path;
  }
}
 
获取cookie
function getCookie(key) {
  var str = document.cookie; //是一个字符串
  if (str) {
    var cookieList = str.split("; "); //所有cookie的集合["key1=value1","key2=value2","key3=value3"]
    for (var i = 0; i < cookieList.length; i++) {
      var cookie = cookieList[i]; //key1=value1 ; key2=value2 ;key3=value3
      var itemList = cookie.split("="); //分别取出key value
      var itemKey = itemList[0];
      var itemValue = itemList[1];
      if (itemKey == key) { //找到cookie
        return itemValue;
      }
    }
      return "";
  } else {
    return "";
  }
}
 

还有什么不懂的,可以逛逛这个博主的网站https://segmentfault.com/a/1190000012057010

localStorage、sessionStorage、Cookie的区别及用法的更多相关文章

  1. 客户端 localStorage, sessionStorage, cookie 的区别

    SessionStorage, LocalStorage, Cookie这三者都可以被用来在浏览器端存储数据,而且都是字符串类型的键值对! 区别在于前两者属于WebStorage,创建它们的目的便是存 ...

  2. localstorage sessionstorage cookie的区别

    一.基本概念 Cookie cookie比较小,大小限制在4kb左右,是网景公司的前雇员 LouMontulli 在1993年3月的发明.它的主要用途有保存登录信息,比如你登录某个网站市场可以看到“记 ...

  3. cookie和session,sessionStorage、localStorage和cookie的区别

    1.cookie 含义: 存储在访问者的计算机中的变量,即存储在客户端 创建一个cookie /* getCookie方法判断document.cookie对象中是否存有cookie,若有则判断该co ...

  4. localStorage sessionStorage cookie indexedDB

    目录: localStorage sessionStorage cookie indexedDB localStorage localStorage存储的数据能在跨浏览器会话保留 数据可以长期保留,关 ...

  5. localStorage&sessionStorage&Cookie

    localStorage.sessionStorage.Cookie三者区别如下:

  6. localStorage,sessionStorage,cookie使用场景和区别

    localStorage:HTML5新增的在浏览器端存储数据的方法.设置和获取localStorage的方法: 设置: localStorage.name = 'zjj'; 获取: localStor ...

  7. localStorage,sessionStorage,cookie区别

    localStorage:HTML5新增的在浏览器端存储数据的方法.设置和获取localStorage的方法: 设置: localStorage.name = 'zjj'; 获取: localStor ...

  8. localstorage sessionstorage cookie 备忘

    /* sessionStorage: 保存的数据用于浏览器的一次会话,当会话结束(通常是该窗口关闭),数据被清空: localStorage: 保存的数据长期存在,下一次访问该网站的时候,网页可以直接 ...

  9. 本地存储 localStorage/sessionStorage/cookie

    cookie是个基础的东西.是服务器发送到客户端,存储在客户端的一小段数据.可以存储一些配置信息,客户标识信息等.用户下次访问这个网站时,会把上次网站发来的cookie一同发送回去.cookie保存在 ...

随机推荐

  1. opencart忘记登录密码怎么办

    今天一位客户问opencart忘记登录密码怎么办,他们公司内部有几位员工同时在管理,可能是哪位同事把密码给改了没有跟大家说,现在都登录不了.这个只能数据库修改了.进入opencart的数据库,找到oc ...

  2. 【java异常】redis.clients.jedis.exceptions.JedisConnectionException: Could not get a res

    产生此错误的原因通常是: 一.Redis没有启动: 我自己遇到一次这样的问题.汗! 二.由于防火墙原因无法连接到Redis; 1.服务器防火墙入站规则. 2.访问Redis的应用程序所在主机的出站规则 ...

  3. MySQL数据库索引类型、MySQL索引的优化及MySQL索引案例

    关于MySQL索引的好处,如果正确合理设计并且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一个人力三轮车.对于没有索引的表,单表查询可能几十万数据就是瓶颈,而通常大型 ...

  4. React创建组件的方法,组件的props属性、state属性的用法和特点,父子组件传值,兄弟组件传值

    创建组件的方法,组件的props属性.state属性的用法和特点,父子组件传值,兄弟组件传值 1.react组件 1.1.创建组件的方法 1.1.1.函数组件 定义一个组件最简单的方式是使用JavaS ...

  5. spring boot 启动遇到报错:Failed to configure a DataSource

    spring  boot 启动遇到报错,具体如下 Description: Failed to configure a DataSource: 'url' attribute is not speci ...

  6. Notepad++ 【自动完成】与【输入时提示函数参数】互相冲突,无奈

    Notepad++ 既然可以在输入时提示函数参数,可是当提示函数参数的时候,输入具体参数时[自动完成]失效了. 一位用户遇到和我一样的问题:https://community.notepad-plus ...

  7. jvm jdk jre 关系

    JDK : Java Development ToolKit(Java开发工具包).JDK是整个JAVA的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工 ...

  8. 本周使用angular7所遇到的一些问题

    前言 本周在使用angular7所遇到的一些问题,学习是不断的循序渐进的过程,在本周完成对应的工作后,也要抽出一些时间用来学习,比较我们公司10点上班,我一般9点就会到,在这一个小时内看看博客,写写笔 ...

  9. 【转帖】普通程序员如何转向AI方向

    普通程序员如何转向AI方向 https://www.cnblogs.com/subconscious/p/6240151.html 眼下,人工智能已经成为越来越火的一个方向.普通程序员,如何转向人工智 ...

  10. 【Python】处理Excel的库Xlwings

    # # 引入库 import xlwings as xw import time # 打开Excel程序,默认设置:程序可见,只打开不新建工作薄 # app = xw.App(visible=True ...