cookie的认识使用以及封装

目录

1.什么是cookie?

2.使用 JavaScript 创建与读取Cookie

​3. cookie的封装

4.cookie特点


1.什么是cookie?

Cookie 用于存储 web 页面的用户信息。

Cookie 是一些数据, 存储于你电脑上的文本文件中。

当 web 服务器向浏览器发送 web 页面时,在连接关闭后,服务端不会记录用户的信息。

Cookie 的作用就是用于解决 "如何记录客户端的用户信息":

  • 当用户访问 web 页面时,他的名字可以记录在 cookie 中。
  • 在用户下一次访问该页面时,可以在 cookie 中读取用户访问记录。

浏览器中百度所存储的cookie信息

2.使用 JavaScript 创建与读取Cookie

  cookie 的设置
    + 语法: document.cookie = 'key=value'
    + 一次只能设置一条

  cookie 设置的时候加上修饰信息
    + 语法: document.cookie = 'key=value; 修饰信息'
    + 修饰一个过期时间
      => document.cookie = 'key=value;expires=时间对象'

读取cookie

var x = document.cookie;

document.cookie 将以字符串的方式返回所有的 cookie,类型格式: cookie1=value; cookie2=value; cookie3=value;

cookie 的存储,默认浏览器关闭就销毁 

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>

<body>
  <script>
    /*
     cookie 向浏览器中存储数据
     document.cookie='k1=v1;expires=time';
     cookie 必须以服务器的方式打开,才会生效
    */
    // cookie 的存储,默认浏览器关闭就销毁
    document.cookie = 'name=张三'
    document.cookie = 'age=22'

    //案例:给cookie添加时间限制,时间一到,cookie自动销毁清楚
    // 有效期设置,不能使用中国时间
    var date = new Date();
    // 设置2min后过期
    console.log(date.getTime()); // 获取时间 戳
    /*
        date - 0将date转换为时间戳,防止与后面的数据进行拼接
        2 * 60 * 1000 将2分钟的时间转换成毫秒,两者相加得到cookie两分钟后过期的时间
    */
    date.setTime(date - 0 + 2 * 60 * 1000);
    // 转化为时间字符串
    //toGMTString()根据格林威治时间 (GMT) 把 Date 对象转换为字符串,并返回结果
    var str = date.toGMTString();
    // 注意设置完成要注释掉
    document.cookie = 'hobby=看书;expires=' + str;

    // cookie 的读取,一次性读取所有的值...
    console.log(document.cookie);
  </script>
</body>

</html>

3. cookie的封装

原生cookie操作对于设置cookie和读取cookie 不是很友好,这就需要我们设置.

cookie的读取

创建一个cookie对象,其中有获取cookie与设置cookie两个函数方法,通过调用对象的方法调用

var res1 = Cookie.getCookie('name');Cookie.setCookie('name', '张三');

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>

<body>
  <script>
    // 存cookie 
    /*
     存
     1 判断k,v 是否传递,没有则停止
     2 exp 是否传递,有则拼接时间
     3 设置
    
    */
   //封装一个cookie对象
    var Cookie = {
      setCookie: function (k, v, exp) {
        // 去除空格...
        k = k.trim();
        v = v.trim();
        // 1 判断k,v 是否为空,没有值则停止
        if (!k || !v) return;
        // 2 exp 是否传递,有则拼接时间
        var expStr = '';
        if (exp) {
          // 2-1 获取时间 对象
          var d = new Date();
          d.setTime(d - 0 + exp * 60 * 1000);
          // 2-2 转化为时间字符串
          var timeStr = d.toGMTString();
          // .cooki='k=v;expires=time'
          expStr = ';expires=' + timeStr;
        }
        // 3 设置cookie
        document.cookie = k + '=' + v + expStr;
      },
      // 读,根据key返回数据
      getCookie: function (k) {
        // 1 判断k是否存在
        k = k.trim();
        if (!k) return null;
        // 2 读取所有的cookie
        var cook = document.cookie;
        // console.log(cook);
        // 没有cook则结束代码执行
        if (!cook) return;
        //3 使用; 将字符串转化为数组
        cook = cook.split(';') // k=v;k=v
        // console.log(cook);
        // 4 遍历数组元素和目标进行比对
        var res = cook.filter(function (v) {
          // console.log(v);
          return v.indexOf(k) != -1
        });
        // console.log(res[0]);
        //判断是否有返回值
        if (!res.length) return null;

        // 5 获取数组的元素,转化为字符串
        // console.log(res);//[" name=张三"]
        // 此时满足条件的元素,是包含k=v的数组,获取此数组第一个元素,再以=分割为数组
        //将res重新分割赋值
        res = res[0].split('=')
        // console.log(res);//[ "name","张三"]
        res[0] = res[0].trim();//去除第一个元素的空格[res[0]]: res[1]作为对象的键与键值返回
        // 属性是变量[]
        // [res[0]] ===> [元素]===>属性 将
        return {
          [res[0]]: res[1]
        }

      }
    }

    Cookie.setCookie('name', '张三');
    Cookie.setCookie('age', '32')
    var res1 = Cookie.getCookie('name');
    console.log(res1);
    var res2 = Cookie.getCookie('age');
    console.log(res2);

  </script>
</body>

</html>

 效果图

4.cookie特点

  • cookie 是基于域名存储的( 一个域名存储, 哪一个域名使用)
  • cookie 的存储有大小限制(4 KB 左右, => 50 条左右)
  • cookie 的存储数据格式 能是字符串格式的内容 key=value; key2=value'
  • cookie 存储是有时效性的 ,是会话级别的时效, 关闭浏览器自动删除 可以手动设置过期时间, 不管是否关闭浏览器, 都会计时
  • 前后端传输 要 cookie 空间内有内容 在当前页面内发送的所有给后端的信息, 都会自动携带 cookie
  • 前后端操作 ,可以依靠 js 来操作 后端可以依靠任何语言操作 cookie不同网站不能共享

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值