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