资讯专栏INFORMATION COLUMN

封装一个 cookie 功能

Cc_2011 / 2201人阅读

摘要:中的在中操作通过来实现操作在传递过程中,使用上面这样的方式对于参数的传递和拼接都是不太方便的,下面我们来封装一个自己的功能。上面就是我们封装的功能模块来帮主我们设置和获取,之所以封装这个功能最终的目的就是让我们更方便的通过来操作。

阅读原文


cookie 概述

由于浏览器无状态的特性,cookie 技术应运而生,cookie 是一个会话级的存储,用于某些网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密),通过访问某些服务器而特定携带的存储信息,不支持跨域,在浏览器清空缓存或超过有效期后失效。

JavaScript 中的 cookie

在 JavaScript 中操作 cookie 通过 document.cookie 来实现:

// 操作 cookie
document.cookie = "key1=value1; key2=value2; path=/; domain=pandashen.com";

在传递 cookie 过程中,使用上面这样的方式对于参数的传递和拼接都是不太方便的,下面我们来封装一个自己的 cookie 功能。

封装一个 cookie 模块 1、整体思路设计
(function() {
    var kvTool = {
        maxage: "max-age",
        path: "path",
        domain: "domain",
        secure: "secure"
    };

    function setCookie() {}

    function getCookie() {}

    var cookieUtil = function() {};

    window.cookieUtil = cookieUtil;
})();

我们封装了一个自执行函数,在内部将 cookie 基本参数的键名存入 kvTool 对象当中设计的 options 参数的键名一一对应,并多带带声明一个设置 cookie 的方法 setCookie 和获取 cookie 的方法 getCookie,最后用函数表达式的形式声明一个 cookieUtil 暴露给全局作用域。

2、setCookie 方法的实现
(function() {
    var kvTool = {
        maxage: "max-age",
        path: "path",
        domain: "domain",
        secure: "secure"
    };

    function setCookie(k, v, options) {
        if (!options) {
            document.cookie = k + "=" + v;
        } else {
            var tmp = [];
            for (var key in options) {
                // { path="/", domain="pandashen.com" }
                tmp.push(kvTool[key] + "=" + options[key]);
            }
            document.cookie = k + "=" + v + "; " + tmp.join("; ");
        }
    }

    function getCookie() {}

    var cookieUtil = function() {};

    window.cookieUtil = cookieUtil;
})();

setCookie 方法的有三个参数:

k:cookie 发送信息的键

v:cookie 发送信息的值

options:cookie 的基本参数

当没有传入基本参数 options 的时候直接将 cookie 发送信息的键值拼接赋值给 document.cookie

传入基本参数 options 的时候取出 kvTool 真正的键名,并和 cookie 发送的信息的键值拼接成 k=v; k=v 形式的字符串赋值给 document.cookie

3、getCookie 方法的实现
(function() {
    var kvTool = {
        maxage: "max-age",
        path: "path",
        domain: "domain",
        secure: "secure"
    };

    function setCookie(k, v, options) {
        if (!options) {
            document.cookie = k + "=" + v;
        } else {
            var tmp = [];
            for (var key in options) {
                // { path="/", domain="pandashen.com" }
                tmp.push(kvTool[key] + "=" + options[key]);
            }
            document.cookie = k + "=" + v + "; " + tmp.join("; ");
        }
    }

    function getCookie(k) {
        var strCookie = document.cookie;
        // 形如: "k=v; k=v; k=v; k=v"
        var kvs = strCookie.split(";").map(v => v.trim());
        var objCookie = {};

        kvs.forEach(v => {
            var kv = v.split("=");
            objCookie[kv[0]] = kv[1];
        });

        return objCookie[k];
    }

    var cookieUtil = function() {};

    window.cookieUtil = cookieUtil;
})();

getCookie 方法只有一个参数,即我们要获取的 cookie 的某一个属性的键,函数会将对应的值返回。

其实对外暴露的方法只有 cookieUtil,所以 setCookiegetCookie 都是在 cookieUtil 内部调用的。

4、cookieUtil 方法的实现
(function() {
    var kvTool = {
        maxage: "max-age",
        path: "path",
        domain: "domain",
        secure: "secure"
    };

    function setCookie(k, v, options) {
        if (!options) {
            document.cookie = k + "=" + v;
        } else {
            var tmp = [];
            for (var key in options) {
                // { path="/", domain="pandashen.com" }
                tmp.push(kvTool[key] + "=" + options[key]);
            }
            document.cookie = k + "=" + v + "; " + tmp.join("; ");
        }
    }

    function getCookie(k) {
        var strCookie = document.cookie;
        // 形如: "k=v; k=v; k=v; k=v"
        var kvs = strCookie.split(";").map(v => v.trim());
        var objCookie = {};

        kvs.forEach(v => {
            var kv = v.split("=");
            objCookie[kv[0]] = kv[1];
        });

        return objCookie[k];
    }

    var cookieUtil = function(key, value, options) {
        if (!value) {
            // 没有传参, 得到数据
            return getCookie(key);
        } else {
            setCookie(key, value, options);
        }
    };

    window.cookieUtil = cookieUtil;
})();

cookieUtil 的逻辑为当 keyvalue 两个参数都传入时,调用 setCookie 来设置 cookie,只传入 key 时,调用 getCookie 获取 cookie 对应参数的值。

上面就是我们封装的 cookie 功能模块来帮主我们设置和获取 cookie,之所以封装这个功能最终的目的就是让我们更方便的通过 JavaScript 来操作 cookie

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/98289.html

相关文章

  • 本地存储cookie封装,提供简单的API

    摘要:本地存储的封装,提供简单的,没有对做兼容处理,因为俺主要用于,,移动端等先进浏览器里面跑。安装下载地址设置的值,生存时间半个小时获取的值,显示删除清空获取所有批量设置的值过期时间路径域以及安全。如果想让本地也加密,得自己加密数据。 showImg(https://img.shields.io/github/issues/jaywcjlove/cookie.js.svg); showIm...

    wwq0327 评论0 收藏0
  • javascript cookie的传统用法,用cookie一个记住用户名的小功能

    摘要:设置天过期,代表昨天已经过期存一个,天之后过期天之后过期记得用火狐测试做一个小记住用户名兼容测试名字值多少天过期参数传多少天,就过期多少天如果没找到返回空字符串。 最简单的设置cookie的方法 document.cookie=password=123456; 用expires设置cookie过期时间 window.onload=function(){ v...

    mcterry 评论0 收藏0
  • express简单总结

    摘要:介绍如有不详细或者不正确的地方多多指正。可以通过官方提供的命令行进行安装,官方目前默认的界面文件用格式,建议修改为格式的文件版权问题,同时要在中安装对应的包和设置对应的界面引擎解释器。 express介绍 如有不详细或者不正确的地方多多指正。 我们可以拿js与jquery关系来类比一下: jQuery是JS在浏览器环境下的封装库,把DOM操作,ajax等封装成了兼容性好,方便使用的方法...

    ivyzhang 评论0 收藏0
  • koa源码阅读[1]-koa与koa-compose

    摘要:接上次挖的坑,对相关的源码进行分析第一篇。和同为一批人进行开发,与相比,显得非常的迷你。在接收到一个请求后,会拿之前提到的与来创建本次请求所使用的上下文。以及如果没有手动指定,会默认指定为。 接上次挖的坑,对koa2.x相关的源码进行分析 第一篇。 不得不说,koa是一个很轻量、很优雅的http框架,尤其是在2.x以后移除了co的引入,使其代码变得更为清晰。 express和ko...

    vibiu 评论0 收藏0
  • Vue2.0 + ElementUI 手写权限管理系统后台模板(一)——简述

    摘要:简介最近写了一个基于权限管理系统的后台模板,包含了正常项目开发所需的框架功能,开发者使用的时候只需要专注于项目的业务逻辑就好。同时接下来会让你拥有一个自己完全掌控的框架。 简介 最近写了一个基于vue2.0+element-ui权限管理系统的后台模板,包含了正常项目开发所需的框架功能,开发者使用的时候只需要专注于项目的业务逻辑就好。同时接下来会让你拥有一个自己完全掌控的框架。 源码地址...

    _ivan 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<