Vinson

Vinson

本地储存技术

发表于 2023-08-12
Vinson
阅读量 42

JavaScript localStorage

存储时间

  • localStorage(IE8 以下不兼容)

    • 永久存储
    • 最大存储 5M 客户端的微型数据库
    • 只能存储 string
  • cookie

    • 可以设置过期时间
    • 最大存 4KB
    • 每一个域名下面最多可以存储 50 条数据
    • sessionStorage(结合后台使用、关闭窗口存储的数据清空)

localStorage 对象

// 设置键 值
localStorage.setItem("key","value");// 设置键,值(必须 json 字符串)
localStorage.key="value";

// 获取对应键值
localStorage.getItem("key");
localStorage.key;

// 删除键值
localStorage.removeItem(name); // 删除对应键
localstorage.clear(); // 清除所有
js

JavaScript sessionStorage

  • 常用于后台服务端控制前端存储数据
  • 或用户登录信息,但与 localstore 主要不同的是只在会话期间有效
// 设置键 值
sessionStorage.setItem("key","value");
sessionStorage.key="value";

// 获取对应键值
变量=sessionStorage.getItem("key");
变量=sessionStorage.key;

// 删除键值
sessionStorage.removeItem(name); // 删除对应键
sessionStorage.clear()

js

JavaScript cookie

存储格式

name=value;[expires=date];[path=path];[domain=somewhere.com];[secure],
js

键 = 值; 后续中括号的内容,都是可选项。

火狐支持缓存 cookie,谷歌只支持服务器缓存 cookie

  • [expires=date]:‘expires=过期时间’
  • [path=path]:设置的cookie的路径
    • 如果不设置,默认是加载当前.html文件的路径
    • 设置的cookie的路径,和加载当前文件的路径,必须一致,如果不一致,cookie 访问失败。
'username=xxx;path=' + '/code14/cookie'; // 可以访问当前与html同一路径
'username=xxx;path=' + '/code14/cookie/111';// 设置其他路径后 不能访问
js
  • [domain=somewhere.com]:domain 限制访问域名
    • 如果不去设置,默认是加载当前 .html 文件的服务器域名 /ip
    • 如果加载当前文件域名和设置的域名不一致,设置 cookie 失败。不能设置
document.cookie = 'username=xxx;domain=' + 'localhostxxx'; // 设置失败
js
  • secure
    • 如果不设置,设置 cookie,可以通过 http/https 协议加载文件设置
    • 设置字段后,只能 https 协议加载 cookie.
document.cookie = 'username=xxx;secure'
js

获取cookie

document.cookie
js

设置cookie

document.cookie = 'username=xxx';
js

转码储存

encodeURIComponent():将中文编译成对应的字符
decodeURIComponent():将对应的字符编译成中文
document.cookie = 'username=' + encodeURIComponent("蜘蛛侠");
js

转码获取

decodeURIComponent(document.cookie)
js

删除cookie

document.cookie = "username=;expires=" + new Date(0);
js

setCookie 封装

function setCookie(name,value,{expires,path,domain,secure}){
  var str = encodeURIComponent(name) + "=" + encodeURIComponent(value);
  if(expires) str += ";expires=" + afterOfDate(expires);
  if(path) str += ";path=" + path;
  if(domain) str += ";domain=" + domain;
  if(secure) str += ";secure";
  document.cookie = str;
}

// 获取n天后的时间
function afterOfDate(n){
  var date = new Date();
  var day = date.getDate();
  date.setDate(n + day);
  return date;
}
js

getCookie 封装

// n121=sa; 名字=name; 名字2=2name

function getCookie(name){
  var cookieStr = decodeURIComponent(document.cookie);
  var strat = cookieStr.indexOf(" " + name + "=");
  if(strat == "-1"){
​    return null;
  }else{
​    var end = cookieStr.indexOf(";",strat);
​    if(end == "-1"){
​      end = cookieStr.length;
​    }
​    var str = cookieStr.substring(strat,end);
​    return str.split("=")[1];
  }
}

getCookie("名字2")
js

removeCookie 封装

function removeCookie(name){
  document.cookie = encodeURIComponent(name) + "=;expires=" + new Date(0);
}
js

cookie 封装

/* 
  $cookie()
  一个参数       获取
  两个参数或以上    设置
  两个参数,参数二 null 删除
 */

function $cookie(){
  switch (arguments.length){
​    case 1 : 
​      return getCookie(arguments[0]);
​    case 2 :
​      if(arguments[1] == null){
​        removeCookie(arguments[0]);
​      }else{
​        setCookie(arguments[0],arguments[1],{});
​      }
​      break;
​    default:
​      setCookie(arguments[0],arguments[1],arguments[3]);
​      break;
  }
}

function setCookie(name,value,{expires,path,domain,secure}){
  var str = encodeURIComponent(name) + "=" + encodeURIComponent(value);
  if(expires) str += ";expires=" + afterOfDate(expires);
  if(path) str += ";path=" + path;
  if(domain) str += ";domain=" + domain;
  if(secure) str += ";secure";
  document.cookie = str;
}

function afterOfDate(n){
  var date = new Date();
  var day = date.getDate();
  date.setDate(n + day);
  return date;
}
function getCookie(name){
  var cookieStr = decodeURIComponent(document.cookie);
  var strat = cookieStr.indexOf(" " + name + "=");
  if(strat == "-1"){
​    return null;
  }else{
​    var end = cookieStr.indexOf(";",strat);
​    if(end == "-1"){
​      end = cookieStr.length;
​    }
​    var str = cookieStr.substring(strat,end);
​    return str.split("=")[1];
  }
}
function removeCookie(name){
  document.cookie = encodeURIComponent(name) + "=;expires=" + new Date(0);
}
js
评论
来发一针见血的评论吧!
表情

快来发表评论吧~

推荐文章
  • 测试文章

    20点赞10评论

  • webpack5(一)

    20点赞10评论