数据存储之cookie(二)

数据存储之cookie的属性及js对cookie的读取、写入和删除操作

上一篇介绍为cookie的原理及一些限制之后,本篇文章主要介绍如何操作cookie,所以比较实用。

cookie的六大主要属性

  • name(名称),cookie 名称是不区分大小写的,且必须经过URL编码

  • value(值),同样必须经过URL编码

  • domain (域) cookie对于哪个域是有效的。这个域可以包含子域(subdomain)。子域名,是顶级域名(一级域名或父域名)的下一级,域名整体包括两个“.”或包括一个“.”和一个“/”
    要想cookie在多个二级域名中共享,需要设置domain为顶级域名,这样就可以在所有二级域名里面或者到这个cookie的值了。(关于顶级域名,二级域名,三级域名的区别如下图简要所示),cookie无法设置除当前域名或者其父域名之外的其他domain. 包括子域名,否则cookie不起作用。不设置时,domian为当前域名。

  • path (路径) 对于指定域中的那个路径,应该向服务器发送 cookie。比如我们只想让/head/info这个域名才能访问这个cookie,那我们的domain 就要设置为 /head/info ,而域名为 /head 就不能访问到这个cookie 了。

  • expires/Max-Age(超时时间),表示 cookie 何时应该被删除的时间戳。

  • secure(安全标志),指定后,cookie 只有在使用** SSL 连接**的时候才发送到服务器。

js对cookie的读取、写入和删除操作

js对cookie的操作只有一个接口就是document.cookie。JavaScript 可以使用 document.cookie 属性来创建 、读取、及删除 cookie。当用来获取属性值时,
document.cookie 返回当前页面可用的(根据 cookie 的域、路径、失效时间和安全设置)所有 cookie的字符串,一系列由分号隔开的名值对儿。这对于我们获取指定name的cookie的值极为不便。而当我们想设置cookie的时候必须得给name和value加上 encodeURIComponent 然后再用字符串将所有的属性拼接好,极为丑陋。所以
下面的函数可以简化这些功能。

var CookieUtil = { 
 get: function (name){ 
       var cookieName = encodeURIComponent(name) + "=", 
       cookieStart = document.cookie.indexOf(cookieName), 
       cookieValue = null; 
       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; 
    }, 
 set: function (name, value, expires, path, domain, secure) { 
        var 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; 
      }, 
     unset: function (name, path, domain, secure){ 
     this.set(name, "", new Date(0), path, domain, secure); 
   } 
}; 

你可能感兴趣的:(数据存储之cookie(二))