十分钟了解cookie,成为大神不是梦

一、首先我们了解什么是http协议和cookie。

传输协议:http协议:超文本传输协议,传输html,网页,网页传输协议,记不住状态的协议。
传输的规则:双方要进行信息的传输时,要遵守的规定或约定。大致分为三步:
1、建立连接通道
2、相互通信
3、关闭通道。
http:安全性不高
https:加密传输协议

二、会话跟踪技术cookie:跟踪每一次的连接,记录连接产生的信息,下次连接,跟着一起发送过去
cookie会随着http协议,发往服务器,其实cookie自身,是一种本地存储。

2.1 特点:
        1.只能存字符,文本;
        2.不允许跨域(谁存的,谁用);
        3.时效性,默认会话级,关闭浏览器,可以删除;
        4.数量(50左右)和大小(4K)限制。

2.2 密钥:加密的账号或密码
        加密(admin123)
        md5
        token:令牌,暗号
2.3 安全问题:cookie中所有的内容,因为都是存在本地的文本,所以都是明文,只要能看到你的本地,就有可能看到你的cookie,所以在项目中千万不要在cookie中直接存账号密码,如果可以避免安全问题,或者是个人电脑就可以存。

2.4 cookie如何使用:
        cookie自身是document对象的一个属性
        使用:document.cookie

2.5 cookie的规则:要设置的cookie
            document.cookie = 要设置的cookie
            1.必须是字符:""
            2.字符内的格式要求:名=值,如:"user=admin"
            3.一条代码只能设置一条cookie
            4.设置cookie时,可以配置信息要求
                有效期:"expires=日期对象"
                路径:"path=/page"
            5.cookie的内容和每个配置信息之间用:";"连接

 2.6 设置cookie的语法:
            默认cookie
            document.cookie = "user=admin";

  设置具有有效期的cookie(3天之后)
            var d = new Date();
            d.getDate();获取当前当月天数
            d.setDate(d.getDate() + 3); //获取指定日期
            document.cookie = "abc=123;expires="+d;
            
            设置具有路径的cookie(3天之后)
            document.cookie = "abc=123;path=/page";

            设置具有路径和有效期的cookie(3天之后)
            var d = new Date();
            d.setDate(d.getDate() + 3);
            document.cookie = "abc=123;path=/page;expires="+d;

 2.7 删除cookie:通过有效期,让这个cookie过期,怎么能过期?当前设置曾经的日期。

        查cookie:
            var str = document.cookie

 2.8 cookie工作场景:
        cookie自身其实对工作环境没有要求,但是cookie会随着http发往服务器,使用cookie的时候,是不需要记录客户端和服务器之间的信息。客户端是浏览器,服务器是本地服务器,所以导致,cookie最好也在服务器环境中使用。

三、cookie的简单封装:

   function setCookie(key,val,ops){
        // ops有可能为的值:
            // undefined
            // {}
            // {expires:3}
            // {path:"/"}
            // {expires:3,path:"/"}
        // 处理的是为undefined时
        ops = ops || {};
        // 处理有效期
        let e = "";
        if(ops.expires){
            var d = new Date();
            d.setDate( d.getDate() + ops.expires );
            e = ";expires="+d;
        }
        // 处理路径
        // let p = "";
        // if(ops.path){
        //     p = ";path="+ops.path;
        // }
        let p = ops.path ? ";path="+ops.path : "";
        document.cookie = `${key}=${val}${p}${e}`;
    }

例如下面这个案例:先创建几个cookie,保存后,我们把这几个cookie注释掉,看结果:

 // setCookie("qwe","123");
   // setCookie("asd","234",{});
   // setCookie("zxc","345",{
   //     expires:5
   // });

   
    function setCookie(key,val,ops){
        ops = ops || {};
        let e = "";
        if(ops.expires){
            var d = new Date();
            d.setDate( d.getDate() + ops.expires );
            e = ";expires="+d;
        }
        let p = ops.path ? ";path="+ops.path : "";
        document.cookie = `${key}=${val}${p}${e}`;
    }

可以发现我们之前写的cookie还在,而且刷新不影响。

 function getCookie(key){
        // 1.获取所有cookie
        let strC = document.cookie;
        // 2.使用"; "分割所有cookie,单独拿到每一条
        let arrC = strC.split("; ");
        // 3.遍历每一条cookie
        for(var i=0;i<arrC.length;i++){
            // 4.再次使用"="分割,分割成名字和值独立的状态
            // 5.判断数组的第一位的名字是否与传进来要获取的cookie的名字一致
            if(arrC[i].split("=")[0] === key){
                // 6.如果一致,返回数组的第二位,也就是对应的值
                return arrC[i].split("=")[1];
            }
        }
        // 7.循环结束后,如果程序还在执行,说明没有找到一致的值,那就返回空字符
        return "";
    }

 删除cookie
    removeCookie("abc",{
        path:"/"
    });

function removeCookie(key,ops){
        // 1.保证ops是个对象
        ops = ops || {};
        // 2.ops是对象了,无论如何得有个expires的属性为-1
        ops.expires = -1;
        // 3.将处理好的ops,给setCookie
        setCookie(key,"suibianxie,danshibunengshenglue",ops);
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值