客户端存储(一) cookie

120 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

客户端储存

知识要点

  • 在koa中cookie的使用方式

  • 客户端cookie的使用方式

客户端储存方案

  • 服务端储存

    • 服务端文件储存
    • 内存
    • 数据库:mysql、mongoodb、Oracle等等。
  • 客户端储存(离线储存)

    • 浏览器

cookie

  cookie究竟是什么?

    cookie实际上是一小段文本信息(key-value格式)。客户端向服务器发起请求,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个cookie。客户端浏览器会把cookie存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该cookie一同提交给服务器。服务器检查该cookie,以此来辨认客户

  • cookie是http协议下,服务端或者脚本可以维护客户端信息的一种方式。

  • koa中cookie的使用

    • 储存cookie的值;
    ctx.cookies.set(name, value, [options])
    
    • 获取cookie的值
    ctx.cookies.get(name, [options])
    
    • options常用设置
      • maxAge 一个数字表示从 Date.now() 得到的毫秒数

      • expires cookie 过期的 Date

      • path cookie 路径, 默认是'/'

      • domain cookie 域名

      • secure 安全 cookie 设置后只能通过https来传递cookie

      • httpOnly 服务器可访问 cookie, 默认是 true

      • overwrite 一个布尔值,表示是否覆盖以前设置的同名的 cookie (默认是 false). 如果是 true, 在同一个请求中设置相同名称的所有 Cookie

  • 客户端cookie使用方式;

    • 设置

      document.cookie="key=value"
      
      • key和value是包含在一个字符串中

        • key包含字段
          • [name] 这个name为自己取的cookie名称,同名的值会覆盖
          • domain 所属域名
          • path 所属路径
          • Expires/Max-Age 到期时间/持续时间 (单位是秒)
          • http-only 是否只作为http时使用,如果为true,那么客户端能够在http请求和响应中进行传输,但时客户端浏览器不能使用js去读取或修改
      • 多个key=value使用 ; (分号)分隔

    • 获取

      document.cookie
      

      返回值是当前域名下的所有cookie,并按照某种格式组织的字符串 :key=value;key1=value1;......keyn=valuen

    • 封装

      • 设置cookie封装
      //设置cookie
      function setCookie(name,value,options={}){
          let cookieData = `${name}=${value};`;
          for(let key in options){
              let str = `${key}=${options[key]};`;
              cookieData += str;
          }
          document.cookie = cookieData;
      }
      
      • 获取cookie
      //获取Cookie
      function getCookie(name){
          let arr = document.cookie.split("; ");
          for(let i=0;i<arr.length;i++){
              let items = arr[i].split("=");
              if(items[0]==name){
                  return items[1];
              }
          }
          return "";
      }
      

客户端操作cookie特点

  • 浏览器会主动存储接收到的 set-cookie 头信息的值

  • 有时效性;

  • 可以设置 http-only 属性为 true 来禁止客户端代码(js)修改该值