cookie、localStorage 和 sessionStorage 的使用以及区别

913 阅读2分钟

这是我参与8月更文挑战的第10天,活动详情查看:8月更文挑战

三者的异同

localStorage

  • 访问同一个localStorage对象,页面必须来自同一个域名(子域名无效)、同一种协议,在同一端口上。
  • 仅在客户端(即浏览器)中保存,不参与和服务器的通信。
  • 可以保存5MB的信息。
  • 除非被手动清除,否则将会永久保存。

sessionStorage

  • sessionStorage对象绑定于某个服务器会话,所以当文件在本地运行的时候是不可用的。
  • 仅在客户端(即浏览器)中保存,不参与和服务器的通信。
  • 可以保存5MB的信息。
  • 仅在当前网页会话下有效,关闭页面或浏览器后就会被清除

cookie

  • 每次都会携带在HTTP头中,如果使用cookie保存过多数据会带来性能问题。
  • 可以保存4KB左右信息
  • 可设置失效时间,没有设置的话,默认是关闭浏览器后失效。
  • 如果在浏览器中设置了cookie的过期时间,cookie被保存在硬盘中,关闭浏览器后,cookie数据仍然存在,直到过期时间结束才消失。

localStorage 和 sessionStorage 的增删改查:

储存数据

sessionStorage.setItem('key', 'sessionStorage的值'); // 存储数据
localStorage.setItem('key', 'sessionStorage的值'); // 存储数据

指定键名储存数据

let dataSession=sessionStorage.getItem('key');//获取指定键名数据
let dataSession2=sessionStorage.key;//sessionStorage是js对象,也可以使用key的方式来获取值
console.log(dataSession,dataSession2,'获取指定键名数据');

// localStorage
let dataLocal=localStorage.getItem('key');//获取指定键名数据
let dataLocal2=localStorage.key;//localStorage是js对象,也可以使用key的方式来获取值

获取全部数据

let dataAll = sessionStorage.valueOf(); //获取全部数据
let dataLocalAll = localStorage.valueOf();
console.log(dataAll,dataLocalAll, '获取全部数据');

清空数据

localStorage.clear();
sessionStorage.clear();//清空

cookie的增删改查

保存 cookie 值

let dataCookie = '110';
document.cookie = 'token' + '=' + dataCookie;

获取指定名称的 cookie 值

let cookieData = getCookie('token');
function getCookie(name) {
  // 获取指定名称的cookie值
  let arr = document.cookie.match(
    new RegExp('(^| )' + name + '=([^;]*)(;|$)')
  ); // 使用正则匹配 对应cookie,返回数组
  if (arr != null) {
    console.log(arr);
    return unescape(arr[2]);
  }
  return null;
}
let cookieData = getCookie('token'); // cookie赋值给变量

保存 cookie 并且设置过期时间

setTime('token','cookie的值',10);
function setTime(key,value,expiresDays) {
    //存储 cookie 值并且设置 cookie 过期时间
    let date=new Date();
    date.setTime(date.getTime()+expiresDays*24*3600*1000);
        document.cookie=`${key}=${value}; expires=${date.toGMTString()}`;
    console.log(document.cookie,'存储 cookie 值并且设置 cookie 过期时间');
}

删除 cookie

delCookie('token');
function delCookie(cookieName1) {
  //删除cookie
  let date2 = new Date();
  date2.setTime(date2.getTime() - 10001); //把时间设置为过去的时间,会自动删除
  document.cookie = cookieName1 + '=v; expires=' + date2.toGMTString();
  console.log(document.cookie, '删除cookie');
}

总结

cookie:需要程序员自己封装,源生的Cookie接口不友好

localStorage和sessionStorage:源生接口可以接受,也可再次封装来对Object和Array有更好的支持。localStorage和sessionStorage是html5才应用的新特性,可能有些浏览器并不支持。