zoukankan      html  css  js  c++  java
  • 对cookie和子cookie操作的封装

      1 /**
      2  * 封装cookie的操作
      3  * @type {Object}
      4  */
      5 var CookieUtil = {
      6     /**
      7      * 根据cookie的名字获取相应的值
      8      * @param name cookie名字
      9      * @return {*}
     10      */
     11     get:function (name) {
     12         //对name进行URL编码
     13         var cookieName = encodeURIComponent(name) + '=',
     14             cookieStart = document.cookie.indexOf(cookieName),
     15             cookieValue = null;
     16         //找到cookieName
     17         if (cookieStart > -1) {
     18             //以cookieStart为起点找到最近的";"
     19             var cookieEnd = document.cookie.indexOf(';', cookieStart);
     20             //没找到";",则是document.cookie的最后一个值
     21             if (cookieEnd === -1) {
     22                 cookieEnd = document.cookie.length;
     23             }
     24             //提取相应value字段
     25             cookieValue = decodeURIComponent(document.cookie.substring(cookieStart + cookieName.length, cookieEnd));
     26         }
     27         //返回
     28         return cookieValue;
     29     },
     30     /**
     31      * 设置一个cookie
     32      * @param name cookie名字
     33      * @param value 相应的值
     34      * @param expire 生存周期 Date
     35      * @param path 路径
     36      * @param domain 域名
     37      * @param secure Boolean
     38      */
     39     set:function (name, value, expire, path, domain, secure) {
     40         //必须先进行URL编码
     41         var cookieText = encodeURIComponent(name) + '=' + encodeURIComponent(value);
     42         if (expire instanceof Date) {
     43             //toGMTString()方法正确格式化Date对象
     44             cookieText += '; expire=' + expire.toGMTString();
     45         }
     46         if (path) {
     47             cookieText += '; path=' + path;
     48         }
     49         if (domain) {
     50             cookieText += '; domain=' + domain;
     51         }
     52         if (secure) {
     53             cookieText += '; secure';
     54         }
     55         document.cookie = cookieText;
     56     },
     57     /**
     58      * 删除cookie
     59      * @param name
     60      * @param path
     61      * @param domain
     62      * @param secure
     63      */
     64     unset:function (name, path, domain, secure) {
     65         this.set(name, '', new Date(0), path, domain, secure);
     66     }
     67 };
     68 /*
     69  //set cookies
     70  CookieUtil.set(“name”, “Nicholas”);
     71  CookieUtil.set(“book”, “Professional JavaScript”);
     72  //read the values
     73  alert(CookieUtil.get(“name”)); //”Nicholas”
     74  alert(CookieUtil.get(“book”)); //”Professional JavaScript”
     75  //remove the cookies
     76  CookieUtil.unset(“name”);
     77  CookieUtil.unset(“book”);
     78  //set a cookie with path, domain, and expiration date
     79  CookieUtil.set(“name”, “Nicholas”, “/books/projs/”, “www.wrox.com”,
     80  new Date(“January 1, 2010”));
     81  //delete that same cookie
     82  CookieUtil.unset(“name”, “/books/projs/”, “www.wrox.com”);
     83  //set a secure cookie
     84  CookieUtil.set(“name”, “Nicholas”, null, null, null, true);
     85  */
     86 
     87 //子cookie的操作
     88 //为了绕开浏览器的单域名下的cookie数限制
     89 //子cookie是存放在单个cookie中的更小段的数据
     90 var SubCookieUtil = {
     91     /**
     92      * 获取单个子cookie的值
     93      * @param name cookie名称
     94      * @param subName 子cookie名称
     95      * @return {*}
     96      */
     97     get:function (name, subName) {
     98         var subCookies = this.getAll(name);
     99         if (subCookies) {
    100             return subCookies(subName);
    101         } else {
    102             return null;
    103         }
    104     },
    105     /**
    106      * 获取所有子cookie并将它们放入一个对象中返回
    107      * @param name cookie名称
    108      * @return {*} 返回对象或null
    109      */
    110     getAll:function (name) {
    111         var cookieName = encodeURIComponent(name) + "=",
    112             cookieStart = document.cookie.indexOf(cookieName),
    113             cookieValue = null,
    114             result = {};
    115         if (cookieStart > -1) {
    116             var cookieEnd = document.cookie.indexOf(";", cookieName);
    117             if (cookieEnd === -1) {
    118                 cookieEnd = document.cookie.length;
    119             }
    120             //没有进行解码,因为要对子cookie分离操作
    121             cookieValue = document.cookie.substring(cookieStart + cookieName.length, cookieEnd);
    122             //
    123             if (cookieValue.length > 0) {
    124                 //分离出子cookie的对象
    125                 var subCookies = cookieValue.split("&");
    126                 //遍历分隔出子cookie的名称和值,解码后返回对象
    127                 for (var i = 0, len = subCookies.length; i < len; i++) {
    128                     var parts = subCookies[i].split("=");
    129                     result[decodeURIComponent(parts[0])] = decodeURIComponent(parts[1]);
    130                 }
    131                 return result;
    132             }
    133         }
    134         //没找到,返回空
    135         return null;
    136     },
    137     /**
    138      * 存储单个子cookie
    139      * @param name cookie名称
    140      * @param subName 子cookie名称
    141      * @param value 子cookie值
    142      * @param expires 失效日期
    143      * @param path 路径
    144      * @param domain 域名
    145      * @param secure Boolean安全作用域
    146      */
    147     set:function (name, subName, value, expires, path, domain, secure) {
    148         //获取name名称的所有子cookie,没有则创建空对象
    149         var subcookies = this.getAll(name) || {};
    150         //给对象添加属性和值
    151         subcookies[subName] = value;
    152         //调用setAll()方法
    153         this.setAll(name, subcookies, expires, path, domain, secure);
    154     },
    155     /**
    156      * 存储所有子cookie
    157      * @param name cookie名称
    158      * @param subcookies 子cookie名称
    159      * @param expires 失效日期
    160      * @param path 路径
    161      * @param domain 域名
    162      * @param secure Boolean安全作用域
    163      */
    164     setAll:function (name, subcookies, expires, path, domain, secure) {
    165         var cookieText = encodeURIComponent(name) + "=";
    166         //创建数组,用于保存子cookie
    167         var subcookieParts = [];
    168         //遍历对象属性
    169         for (var subName in subcookies) {
    170             //如果存在,则把编码后的名称和值保存到数组
    171             if (subName.length > 0 && subcookies.hasOwnProperty(subName)) {
    172                 subcookieParts.push(encodeURIComponent(subName) + "=" + encodeURIComponent(subcookies[subName]));
    173             }
    174         }
    175         //存在子cookie
    176         if (subcookieParts.length > 0) {
    177             //连接子cookie
    178             cookieText += subcookieParts.join("& ");
    179             if (expires instanceof Date) {
    180                 cookieText += ";expires=" + expires.toGMTString();
    181             }
    182             if (path) {
    183                 cookieText += ";path=" + path;
    184             }
    185             if (domain) {
    186                 cookieText += ";domain=" + domain;
    187             }
    188             if (secure) {
    189                 cookieText += ";secure";
    190             }
    191         } else {
    192             //相当于删除cookie操作
    193             cookieText += ";expires=" + (new Date(0)).toGMTString();
    194         }
    195         document.cookie = cookieText;
    196     },
    197     /**
    198      * 删除单个子cookie的名称和值
    199      * @param name
    200      * @param subName
    201      * @param path
    202      * @param domain
    203      * @param secure
    204      */
    205     unset:function (name, subName, path, domain, secure) {
    206         var subcookies = this.getAll(name);
    207         if (subcookies) {
    208             //删除对应的属性和值
    209             delete subcookies[subName];
    210             //重新设置cookie
    211             this.setAll(name, subcookies, null, path, domain, secure);
    212         }
    213     },
    214     /**
    215      * 删除所有子cookie
    216      * @param name
    217      * @param path
    218      * @param domain
    219      * @param secure
    220      */
    221     unsetAll:function (name, path, domain, secure) {
    222         this.setAll(name, null, new Date(0), path, domain, secure);
    223     }
    224 };
    225 /*
    226  //assume document.cookie=data=name=Nicholas&book=Professional%20JavaScript
    227  //get all subcookies
    228  var data = SubCookieUtil.getAll(“data”);
    229  alert(data.name); //”Nicholas”
    230  alert(data.book); //”Professional JavaScript”
    231  //get subcookies individually
    232  alert(SubCookieUtil.get(“data”, “name”)); //”Nicholas”
    233  alert(SubCookieUtil.get(“data”, “book”)); //”Professional JavaScript”
    234 
    235  //assume document.cookie=data=name=Nicholas&book=Professional%20JavaScript
    236  //set two subcookies
    237  SubCookieUtil.set(“data”, “name”, “Nicholas”);
    238  SubCookieUtil.set(“data”, “book”, “Professional JavaScript”);
    239  //set all subcookies with expiration date
    240  SubCookieUtil.setAll(“data”, { name: “Nicholas”, book: “Professional JavaScript” },
    241  new Date(“January 1, 2010”));
    242  //change the value of name and change expiration date for cookie
    243  SubCookieUtil.set(“data”, “name”, “Michael”, new Date(“February 1, 2010”));
    244 
    245  //just remove the “name” subcookie
    246  SubCookieUtil.unset(“data”, “name”);
    247  //remove the entire cookie
    248  SubCookieUtil.unsetAll(“data”);
    249  */
  • 相关阅读:
    前端开发 vue,angular,react框架对比1
    前端开发 Angular
    前端开发 Vue Vue.js和Node.js的关系
    net技术
    net技术方案
    软件工程项目费用计算
    前端开发 Vue -4promise解读2
    前端开发 Vue -4promise解读1
    mybatis与hibernate区别
    struts2和springmvc的区别
  • 原文地址:https://www.cnblogs.com/webFrontDev/p/2786022.html
Copyright © 2011-2022 走看看