栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > Web开发 > JavaScript

JavaScript数据存储 Cookie篇

JavaScript 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JavaScript数据存储 Cookie篇

1.什么是cookie?
    答:cookie是用于在客户端存储会话信息的。
2.cookie的组成部分?
    ①名称:一个唯一确定cookie 的名称。建议区分大小写。cookie 的名称必须是经过URL 编码的。
    ②值:储存在cookie 中的字符串值。值必须被URL 编码。
    ③域:cookie 对于哪个域是有效的。所有向该域发送的请求中都会包含这个cookie 信息。这个值可以包含子域(subdomain,如www.wrox.com),也可以不包含它(如.wrox.com,则对于wrox.com的所有子域都有效)。如果没有明确设定,那么这个域会被认作来自设置cookie 的那个域。
    ④路径:对于指定域中的那个路径,应该向服务器发送cookie。例如,你可以指定cookie 只有从http://www.wrox.com/books/ 中才能访问,那么http://www.wrox.com 的页面就不会发送cookie 信息,即使请求都是来自同一个域的。
    ⑤失效时间:表示cookie 何时应该被删除的时间戳。默认情况下,浏览器会话结束时即将所有cookie 删除;不过也可以自己设置删除时间。这个值是个GMT 格式的日期(Wdy, DD-Mon-YYYY HH:MM:SS GMT),用于指定应该删除cookie 的准确时间。因此,cookie
    可在浏览器关闭后依然保存在用户的机器上。如果你设置的失效日期是个以前的时间,则cookie 会被立刻删除。
    ⑥安全标志:指定后,cookie 只有在使用SSL 连接的时候才发送到服务器。例如,cookie 信息只能发送给https://www.wrox.com,而http://www.wrox.com 的请求则不能发送cookie。
3.列举一个cookie的例子?
    以下是一个完整的cookie的例子,我们将把它分解开来:
    Set-cookie: name=value; expires=Mon, 22-Jan-07 07:10:24 GMT; domain=.wrox.com; path=/; secure
    ①名称: name字符串表示
    ②值:value字符串表示
    ③过期时间:Mon, 22-Jan-07 07:10:24 GMT
    ④域名:.wrox.com
    ⑤路径:当前目录/
    ⑥安全标志:secure
4.如何操作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")); // 空

5.cookie的限制
    ①存储数据数量有限
    ②保了储存在cookie 中的信息只能让批准的接受者访问,而无法被其他域访问
    ③安全性有限
6.针对cookie数据存储少量的问题,我们提出了子cookie的概念。即在每条cookie的值中存储多条数据,用"&"隔开。

  var SubcookieUtil = {
    
    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;
    },
    
    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);
    },
    
    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;
    },
    
    get : function (name, subName) {
      var cookies = this.getAll(name);
      if (cookies) {
 return cookies[subName];
      } else {
 return null;
      }
    }, 
    
    unsetAll : function (name, domain, path, secure) {
      this.setAll(name, "", Date(0).toGMTString(), domain, path, secure);
    },
    
    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"));  // 报错,因为已经被删除

以上就是本文的全部内容,希望对大家的学习有所帮助。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/95769.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号