zoukankan      html  css  js  c++  java
  • js封装Cookie操作

    var CookieUtil = {
            // 设置cookie
            set : function (name, value, expires, domain, path, secure) {
                var cookieText = "";
                cookieText += encodeURIComponent(name) + "=" + encodeURIComponent(value);
                if (expires instanceof Date) {
                    cookieText += "; expires=" + expires.toGMTString();
                }
                if (path) {
                    cookieText += "; path=" + path;
                }
                if (domain) {
                    cookieText += "; domain=" + domain;
                }
                if (secure) {
                    cookieText += "; secure";
                }
                document.cookie = cookieText;
            },
            // name=value; expires=expiration_time; path=domain_path; domain=domain_name; secure
            // 获取cookie
            get : function (name) {
                var cookieName = encodeURIComponent(name) + "=",
                    cookieStart = document.cookie.indexOf(cookieName),
                    cookieValue = "";
                if (cookieStart > -1) {
                    var cookieEnd = document.cookie.indexOf (";", cookieStart);
                    if (cookieEnd == -1) {
                        cookieEnd = document.cookie.length;
                    }
                    cookieValue = decodeURIComponent(document.cookie.substring(cookieStart + cookieName.length, cookieEnd));
                }
                return cookieValue; 
            },
            // 删除cookie
            unset : function (name, domain, path, secure) {
                this.set(name, "", Date(0), domain, path, secure);
            }
        };
        // 测试
        CookieUtil.set("name", "zhang");
        var name = CookieUtil.get("name");
        alert(name);    // zhang
        CookieUtil.unset("name");
        alert(CookieUtil.get("name"));  // 空









    针对cookie数据存储少量的问题,我们提出了子cookie的概念。即在每条cookie的值中存储多条数据,用
    "&"隔开。
        var SubCookieUtil = {
            /** 设置一条完整的cookie
            *   param name : 表示cookie的名称,必填
            *   param subCookies : 表示cookie的值,为一个对象,必填
            *   param expires : 表示cookie的过期时间,可以不填
            *   param domain : 表示cookie的域名,可以不填
            *   param path : 表示cookie的路径,可以不填
            *   param secure : 表示cookie的安全标志,可以不填
            *   eg : SubCookieUtil.setAll("info", { name : "zhang", age : 23});
            **/
            setAll : function (name, subCookies, expires, domain, path, secure) {
                var cookieText = "", subName, cookieParts = [];
                cookieText += encodeURIComponent(name) + "=";
                for(subName in subCookies) {
                    cookieParts.push(encodeURIComponent(subName) + "=" + encodeURIComponent(subCookies[subName]));
                }
                if (cookieParts.length > 0) {
                    cookieText += cookieParts.join("&");
                    if (expires instanceof Date) {
                        cookieText += "; expires=" + expires.toGMTString();
                    }
                    if (path) {
                        cookieText += "; path=" + path;
                    }
                    if (domain) {
                        cookieText += "; domain=" + domain;
                    }
                    if (secure) {
                        cookieText += "; secure";
                    }
                } else {
                    cookieText += "; expires=" + Date(0).toGMTString();
                }
                document.cookie = cookieText;
            },
            /** 设置一条子cookie
            *   param name : 表示cookie的名称,必填
            *   param subName : 表示子cookie的名称,必填
            *   param value : 表示子cookie的值,必填
            *   param expires : 表示cookie的过期时间,可以不填
            *   param domain : 表示cookie的域名,可以不填
            *   param path : 表示cookie的路径,可以不填
            *   param secure : 表示cookie的安全标志,可以不填
            *   eg : SubCookieUtil.set("info", "sex", "boy");
            **/
            set : function (name, subName, value, expires, domain, path, secure) {
                var cookies = this.getAll(name) || {};
                cookies[subName] = value;
                this.setAll(name, cookies, expires, domain, path, secure);
            },
            /** 读取一条完整cookie
            *   param name : 表示cookie的名称,必填
            *   return : 一个cookie对象
            *   eg : SubCookieUtil.getAll("info");
            **/
            getAll : function (name) {
                var cookieName = encodeURIComponent(name) + "=",
                    cookieStart = document.cookie.indexOf(cookieName),
                    cookieValue = "", i, len, subCookies, parts, result = {};
                if (cookieStart > -1) {
                    var cookieEnd = document.cookie.indexOf (";", cookieStart);
                    if (cookieEnd == -1) {
                        cookieEnd = document.cookie.length;
                    }
                    cookieValue = decodeURIComponent(document.cookie.substring(cookieStart + cookieName.length, cookieEnd));
                    if (cookieValue.length > 0) {
                        subCookies = cookieValue.split("&");
                        for (i = 0, len = subCookies.length; i < len; i++) {
                            parts = subCookies[i].split("=");
                            result[decodeURIComponent(parts[0])] = decodeURIComponent(parts[1]);
                        }
                        return result;
                    }
                }
                return null;
            },
            /** 获取一条子cookie的值
            *   param name : 表示cookie的名称,必填
            *   param subName : 表示子cookie的名称
            *   return : 一个子cookie的值
            *   eg : SubCookieUtil.get("info", "name");
            **/
            get : function (name, subName) {
                var cookies = this.getAll(name);
                if (cookies) {
                    return cookies[subName];
                } else {
                    return null;
                }
            }, 
            /** 删除一条完整cookie
            *   param name : 表示cookie的名称,必填
            *   param domain : 表示cookie的域名,可以不填
            *   param path : 表示cookie的路径,可以不填
            *   param secure : 表示cookie的安全标志,可以不填
            *   eg : SubCookieUtil.unsetAll("info");
            **/
            unsetAll : function (name, domain, path, secure) {
                this.setAll(name, "", Date(0).toGMTString(), domain, path, secure);
            },
            /** 删除一条子cookie
            *   param name : 表示cookie的名称,必填
            *   param subName : 表示子cookie的名称,必填
            *   param domain : 表示cookie的域名,可以不填
            *   param path : 表示cookie的路径,可以不填
            *   param secure : 表示cookie的安全标志,可以不填
            *   eg : SubCookieUtil.unset("info", "name");
            **/
            unset : function (name, subName, domain, path, secure) {
                var cookies = this.getAll(name);
                if (cookies) {
                    delete cookies[subName];
                    this.setAll(name, cookies, null, domain, path, secure);
                }
            }   
        };
        // 测试:
        var zhang = {
            name : "zhang",
            age : 23,
            height : "178cm",
            weight : "66kg"
        }
        // 设置一条完整的cookie
        SubCookieUtil.setAll("zhang", zhang);
        // 获取一条完整的cookie
        var zhang = SubCookieUtil.getAll("zhang");
        alert(zhang.weight);    // 66kg
        // 再为张添加一个子cookie
        SubCookieUtil.set("zhang", "sport", "basketball");
        // 获取子cookie
        alert(SubCookieUtil.get("zhang", "sport")); // basketball
        // 删除一条子cookie
        SubCookieUtil.unset("zhang", "age");
        alert(SubCookieUtil.get("zhang", "age"));   // undefined
        // 删除一条完整的cookie
        SubCookieUtil.unsetAll("zhang");
        alert(SubCookieUtil.getAll("zhang"));   // 报错,因为已经被删除
  • 相关阅读:
    【HTML5 绘图与动画】使用canvas
    【H5新增元素和文档结构】新的全局属性 1. contentEditable 可编辑内容 2. contextmenu 快捷菜单 3. data 自定义属性 4. draggable 可拖动 5. dropzone 拖动数据 6. hidden 隐藏 7. spellcheck 语法检查 8. translate 可翻译
    【H5新增元素和文档结构】完善旧元素 1. a 超链接 2. ol 有序列表 3. dl 定义列表 4. cite 引用文本 5. small 小号字体 6. iframe 浮动框架 7. script 脚本
    【H5新增元素和文档结构】新的语义信息 1. address 2. time 3. figure 跟 figcaption 4. details 和 summary 5. mark 6. progress 7. meter 8. dialog 9.bdi 10. wbr 11. ruby、rt、rp 12. command
    【H5新增元素跟文档结构】新的文档结构 1. article 文章块 2. section 区块 3. nav 导航条 4. aside 辅助栏 5. main 主要区域 6. header 标题栏 7. hgroup 标题组 8. footer 页脚栏
    5_PHP数组_3_数组处理函数及其应用_9_数组集合运算函数
    【华为云技术分享】鲲鹏弹性云服务器GCC交叉编译环境搭建指南
    【华为云技术分享】7 分钟全面了解位运算
    【华为云技术分享】Linux内核编程环境 (1)
    【华为云技术分享】华为云MySQL 8.0正式商用,全新增强版开源利器强势来袭
  • 原文地址:https://www.cnblogs.com/lxf1117/p/6435612.html
Copyright © 2011-2022 走看看