浅谈localStorage、sessionStorage、cookie

本地存储

** 本地存储的特性**
1:数据存储在一行浏览器之中
2:设置、读取方便、甚至页面刷新不丢失数据
3:容量较大、sessionStorage约5M,localStorage约20M
4:只能存储字符串,可以将对象转化为JSON.stringify()编码后存储(是将数组或者对象转化为字符串)
注意点:JSON.stringify(value[, replacer[, space]]) value需要转化的值

(1):sessionStorage

    01:生命周期是关闭浏览器窗口
    02:在同一个窗口(页面)下数据可以共享
    03:以键值对的形式存储
<input type="text">
  <button class="set">存储数据</button>
  <button class="get">获取数据</button>
  <button class="remove">删除数据</button>
  <button class="clear">清空所有数据</button>

  <script>
    let inp = document.querySelector("input");
    let set = document.querySelector(".set");
    let get = document.querySelector(".get");
    let remove = document.querySelector(".remove");
    let clear = document.querySelector(".clear")
    set.addEventListener("click", function () {
      let val = inp.value;
      //1:存储数据 sessionStorage.setItem(key, value);
      sessionStorage.setItem("uname", val);
      sessionStorage.setItem("pwd", val);
    });
    get.addEventListener("click", function () {
      //2:获取数据   sessionStorage.getItem(key);
      sessionStorage.getItem("uname");
      console.log(sessionStorage.getItem("uname"));
    })
    remove.addEventListener("click", function () {
      //3:删除数据   sessionStorage.removeItem(key);
      sessionStorage.removeItem("uname");
    })
    clear.addEventListener("click", function () {
      //4:清空所有数据  sessionStorage.clear();
      sessionStorage.clear();
    })
  </script>

(2):localStorage

  1:生命周期永久有效,除非你clear,否则关闭浏览器也还是存在的
  2:可以多窗口(页面)共享(同一浏览器可以共享)
  3:以键值对的形式存储
  缺陷:默认只是在客户端,不能主动向服务器发起请求
  优点:就是可以存储大量的数据在于客户端!
  <input type="text">
  <button class="set">存储数据</button>
  <button class="get">获取数据</button>
  <button class="remove">删除数据</button>
  <button class="clear">清空所有数据</button>
  <script>
    let inp = document.querySelector("input");
    let set = document.querySelector(".set");
    let get = document.querySelector(".get");
    let remove = document.querySelector(".remove");
    let clear = document.querySelector(".clear")
    set.addEventListener("click", function () {
      let val = inp.value;
      //1:存储数据 localStorage.setItem(key, value);
      localStorage.setItem("uname", val);
      localStorage.setItem("pwd", val);
    });
    get.addEventListener("click", function () {
      //2:获取数据   localStorage.getItem(key);
      localStorage.getItem("uname");
      console.log(localStorage.getItem("uname"));
    })
    remove.addEventListener("click", function () {
      //3:删除数据   localStorage.removeItem(key);
      localStorage.removeItem("uname");
    })
    clear.addEventListener("click", function () {
      //4:清空所有数据  localStorage.clear();
      localStorage.clear();
    })
  </script>
(01):记住用户名案列
//需求:
// 1:点击记住用户名这个复选框,也就是复选框勾上,用户名记住(选中)
// 2:刷新后, 如果能取到存储的值,默认复选框勾上,并且用户名显示在表单内
// 3:在点击取消记住用户名后,刷新后,复选框不勾上,并且用户名不显示在表单内(不选中)
  <div>
    <input class="txt" type="text"><input type="checkbox" name="" id="uname"><label for="uname">记住用户名</label>
  </div>
  <script>
    let txt = document.querySelector(".txt");
    let uname = document.querySelector("#uname");

    uname.addEventListener("click", function () { //click可以改为change
      if (this.checked) { //选中的时候
        localStorage.setItem("uname", txt.value);
      } else { //不选中的话,
        localStorage.removeItem("uname")
      }
    })
    if (localStorage.getItem("uname")) {
      uname.checked = true;
      txt.value = localStorage.getItem("uname");
    }
  </script>

(3):cookit

  • 目的:适用于服务器端和客户端之间的状态保持连接,来保存这些状态数据

  • 应用场景:
    1:7天免登陆
    2:购物车信息
    添加到购物车后,取到购物车页面,商品信息依然存在
    3:商品浏览记录

  • 运行环境:需要在集成环境(比如:php集成环境)中打开(localhost/具体文件。。。)

  • COOKIE 的特点

  1. 存储大小有限制,一般是 4 KB 左右
  2. 数量有限制,一般是 50 条左右
  3. 有时效性,也就是有过期时间,一般是 会话级别(也就是浏览器关闭就过期了)
  4. 有域名限制,也就是说谁设置的谁才能读取
  • 解析:
  • cookie 是一个以字符串的形式存储数据的位置
  • 每一个 HTTP 请求都会在请求头中携带 cookie 到服务端
  • 每一个 HTTP 响应都会在响应头中携带 cookie 到客户端
  • 也就是说,cookie 是不需要我们手动设置,就会自动在 客户端 和 服务端之间游走的数据
  • 我们只是需要设置一下 cookie 的内容就可以
  • 特性:
    -轻便(不建议超过3kb)
    -只能是纯字符串;
    -不能超过50条信息;
    -身份不是永久的,cookie是有过期时间的;
    -cookie是具备隐私性的 => 1.可访问作用域 ; 2. 浏览器同源策略保护
php之中设置cookie

cookie的内容有 :

  1. cookie 名; *
  2. cookie 值 ; *
  3. cookie 过期时间; *
  4. cookie 的可访问路径;
  5. cookie 使用的domain
  • 注意点:php 的时间戳是以秒来记录 ,然后js获取到的时间戳为毫秒的!
$time_stamp = time() + 28800;
echo $time_stamp;
setcookie("username","yanghuaizhi",$time_stamp + 24 * 3600);

echo $_COOKIE["username"];
cookie的使用方式
  • 语法:document.cookie
  • 作用:可以读取cookie的内容,也可以修改cookie的内容,还可以把cookie设置为过期时间
    const cookie = document.cookie
    console.log(cookie) // 就能得到当前 cookie 的值
    

封装cookie的增删改查函数

document.cookie —用于设置或者获取 cookie的内容,也可以设置删除,也就是把cookie设置为过期的时间!由于每一次都需要手动设置,因此可以封装为函数,操作更为方便!

简单的cookie函数封装
  • setCookie() 增改一体!
    //封装一个设置cookie的函数 注意点:document.cookie = "key=value;" 这种形式设置的
    //参数1:用户名,参数2:密码,参数3:免登陆时间(天)
    function setCookit(name, value, expires) {
      //拼接字符串
      var cookie_str = name + "=" + value; //转化为cookie的格式 key=value; kay=value;
      //02:先判断一下,输出的时间,是否为数字,假如为数字就设置,否则就“”
      if (typeof expires === "number") {
        var d = new Date()
        d.setDate(d.getDate() + expires) //直接设置当前的时间 当前的时间天数 + 上输入的延迟的天数
        cookie_str = cookie_str + ";expires=" + d;
      }
      // console.log(cookie_str);//xiaoxie=1234;expires=Fri Jul 10 2020 19:45:35 GMT+0800 (中国标准时间)
      document.cookie = cookie_str

    }
    setCookit("xiaoxie", 1234, 1)
  • getCookit() 获取到cookit的函数
// 获取cookie的函数 
    //根据用户名:获取到用户名对应的键值!
    function getCookie(name) {
      // var res = document.cookie //xiaoxie=1234; lala=123 需要转化为数组,更方便操作,
      //然后给返回的是,以键值对的形式 key = value 需要遍历
      var cookie_arr = document.cookie.split("; ")
      // console.log(arr);
      for (var i = 0; i < cookie_arr.length; i++) {
        // console.log(cookie_arr[i]);//xiaoxie=1234
        var cookie_item = cookie_arr[i].split("=")
        // console.log(cookie_item); //["xiaoxie", "1234"]
        if (cookie_item[0] == name) {
          // console.log(cookie_item[1]);
          return cookie_item[1]
        }
      }
      return ""
    }
    getCookie("xiaoxie")
  • 删除cookie的函数
  • 注意点:需要借助前面封装的设置cookie的函数!
  • 注意点2:就是在
    //3:删除cookie的函数 原理就是把对应的用户名的时间,设置为过去时间 (因此需要调用设置cookie的函数)
    function deleteCookit(name) {
      console.log(document.cookie);
      setCookit(name, "", -1) //设置为-1之后,浏览器中的cookie账号就过期了,被浏览器清除了!
    }
    deleteCookit("xiaoxie")
高级的cookit函数封装!
    //封装一个设置cookie的函数 
    //参数1:为键,参数2:为键值,参数3:options 可选参数! 可选参数里面有 expires(时间) path(路径) domain(可以访问该Cookie的域名)

    function setCookie(name, value, options) {
      var cookie_str = name + "=" + value;
      if (options.expires) {
        var d = new Date()
        d.setDate(d.getDate() + options.expires)
        cookie_str += ";expires=" + d;
      }

      if (options.path) {
        cookie_str += ";path=" + options.path;
      }

      if (options.domain) {
        cookie_str += ";domain=" + options.domain;
      }
      // console.log(cookie_str);
      document.cookie = cookie_str;
    }
    setCookie("xiaoxie", 111, {
      expires: 2
    })


        // 封装一个cookie函数! 
    //原理:数组内部的元素可以操作的!
    function setCookie(name, value, options) {
      // options默认值;
      options = options || {}

      if (typeof options.expires === "number") {
        var d = new Date()
        d.setDate(d.getDate() + options.expires)
      }

      //就是假如符合条件的话,就拼接后面的数据,最后数组每一个元素拆分为字符串!
      return document.cookie = [
        name + "=" + value,
        typeof options.expires === "number" ? ";expires=" + d : "",
        typeof options.path === "string" ? ";path=" + options.path : "",
        typeof options.domain === "string" ? ";domain=" + options.domain : ""
      ].join("");
    }
    setCookie("xiaoxie", 111, {
      expires: 2,
    })
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值