cookie

作者: 废弃的种子 | 来源:发表于2020-11-25 13:11 被阅读0次

js encodeURI 和 encodeURIComponent 的区别

介绍

1、可以设置过期时间
2、最大可以存储4KB,每一个域名下最多可以存储50条数据(不同的浏览器,有偏差)
注】只能字符串。一般只存储一些重要的信息。登录,购物车信息,是否点赞,视频播放进度等。

语法

格式: name=value;[expires=date];[path=path];[domain=somewhere.com];[secure],
name 键
value 值 都是自定义
【注】后续中括号的内容,都是可选项。
【注】火狐支持本地加载的文件缓存cookie,谷歌只支持服务器加载文件缓存cookie
encodeURIComponent 将中文编译成对应的字符
decodeURIComponent 将对应的字符编译成中文

  • 设置一个cookie
document.cookie='name=value'
  • 设置中文cookie
document.cookie = 'username=' + encodeURIComponent("名字");
  • 获取cookie
 function getCookie(cname) {
            var name = cname + "=";
            var ca = document.cookie.split(';');
            for (var i = 0; i < ca.length; i++) {
                var c = ca[i].trim();
                if (c.indexOf(name) == 0) return c.substring(name.length, c.length);
            }
            return "";
        }
        let res =decodeURIComponent(getCookie('username'))
        console.log(res);
  • 设置有效期
    expires:过期时间必须填写,日期对象
    【注】系统会自动清除过期的cookie。
//获取n天后的日期的方法
             function afterOfDate(n){
                 var d = new Date();
                 var day = d.getDate();
                 d.setDate(n + day);
                 return d;
             }

        
//快速获取之前时间
new Date(0)
Thu Jan 01 1970 08:00:00 GMT+0800 (中国标准时间) {}
//示例(设置7天后过期)
document.cookie = "username=xxx;expires=" + afterOfDate(7);
//示例 (手动过期)
 document.cookie = "username=;expires=" + new Date(0);
  • path 限制访问路径
    如果不去设置,默认是加载当前.html文件的路径
    【注】我们设置的cookie的路径,和加载当前文件的路径,必须一致,如果不一致,cookie访问失败。
  • domain 限制访问域名
    如果不去设置,默认是加载当前.html文件的服务器域名/ip
    【注】如果加载当前文件域名和设置的域名不一致,设置cookie失败。
  • secure
    如果不设置,设置cookie,可以通过http协议加载文件设置,也可以通过https协议加载文件设置
    【注】设置这个字段以后,只能设置https协议加载cookie.
  • 示例
 document.cookie = 'username=xxx;domain=' + "localhosx";

cookie 封装

  • cookie.js
//name=value;[expires=date];[path=path];[domain=somewhere.com];[secure],
            /* 
                expires  传入对应天数
             */
            function setCookie(name, value, {expires, path, domain, secure}){
                var cookieStr = encodeURIComponent(name) + "=" + encodeURIComponent(value);
                if(expires){
                    cookieStr += ";expires=" + afterOfDate(expires);
                }
                if(path){
                    cookieStr += ";path=" + path;
                }
                if(domain){
                    cookieStr += ";domain=" + domain;
                }
                if(secure){
                    cookieStr += ";secure";
                }
                document.cookie = cookieStr;
            }

            //获取n天后的日期
            function afterOfDate(n){
                 var d = new Date();
                 var day = d.getDate();
                 d.setDate(n + day);
                 return d;
             }

             function getCookie(name){
                var cookieStr = decodeURIComponent(document.cookie);
                var start = cookieStr.indexOf(name + "=");
                if(start == -1){
                    return null;
                }else{
                    //查询从start位置开始遇到的第一个分号
                    var end = cookieStr.indexOf(";", start);
                    if(end == -1){
                        end = cookieStr.length;
                    }

                    //进行字符串提取
                    var str = cookieStr.substring(start, end);
                    var arr = str.split("=");
                    return arr[1];
                }
             }

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

            /* 
                【注】在使用一个方法实现三个功能的时候。
                     通过传入参数的数量识别:

                     设置cookie
                     $cookie(name, value);
                     $cookie(name, value, {});

                     获取cookie
                     $cookie(name);

                     删除cookie
                     $cookie(name, null);
            */

           function $cookie(name){
                //判断传入参数的个数
                switch(arguments.length){
                    case 1:
                        return getCookie(name);
                        break;
                    case 2:
                        if(arguments[1] == null){
                            removeCookie(name);
                        }else{
                            setCookie(name, arguments[1], {});
                        }
                        break;
                    default:
                    setCookie(name, arguments[1], arguments[2]);
                        break;
                }
            }
  • html
<!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>
        <script src = 'cookie.js'></script>
        <script>
            //设置
            $cookie("超级英雄", "钢铁侠");
            $cookie("DC", "蝙蝠侠", {
                expires: 7
            });
            $cookie("神话", "猪八戒", {
                expires: 30
            });
            //获取
            alert($cookie("超级英雄"));
            alert($cookie("DC"));
            alert($cookie("神话"));
            //删除
            window.onload = function(){
                var oBtn = document.getElementById("btn1");
                oBtn.onclick = function(){
                    $cookie("超级英雄", null);
                    alert($cookie("超级英雄"));
                }
            }
            
        </script>
    </head>
    <body>
        <button id = 'btn1'>删除cookie</button>
    </body>
</html><!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>
        <script src = 'cookie.js'></script>
        <script>
            //设置
            $cookie("超级英雄", "钢铁侠");
            $cookie("DC", "蝙蝠侠", {
                expires: 7
            });
            $cookie("神话", "猪八戒", {
                expires: 30
            });
            //获取
            alert($cookie("超级英雄"));
            alert($cookie("DC"));
            alert($cookie("神话"));
            //删除
            window.onload = function(){
                var oBtn = document.getElementById("btn1");
                oBtn.onclick = function(){
                    $cookie("超级英雄", null);
                    alert($cookie("超级英雄"));
                }
            }
            
        </script>
    </head>
    <body>
        <button id = 'btn1'>删除cookie</button>
    </body>
</html>

cookie库

https://www.npmjs.com/package/js-cookie

相关文章

网友评论

      本文标题:cookie

      本文链接:https://www.haomeiwen.com/subject/tvfniktx.html