cookie

作者: strong9527 | 来源:发表于2016-08-29 23:22 被阅读12次

转载处:聂微东大神的cookie博文

博文如有不妥,请赐教 (本人前端小菜鸡一枚);

定义(w3c)

cookie 是存储于访问者的计算机中的变量。每当同一台计算机通过浏览器请求某个页面时,就会发送这个 cookie。你可以使用 JavaScript 来创建和取回 cookie 的值

设置和获取

  • 设置 (特殊情况下的编码问题)
    在设置方面很简单

    document.cookie = "name=strong";
    就这样一个简单的句子就设定了一个cookie 键值对

    但是当给cookie设置一个有特殊字符的复杂值时,又涉及到了编码问题。

    var a = "stron;g";
    document.cookie = "name="+a;
    document.cookie = "name1=" + escape(a);

可以看到,通过编码成功地将特殊字符 ';' 写进了cookie

  • 获取

    document.cookie是一段字符串,这就给获取添加了一定的难度
    我认为最简单的获取方式是通过 正则表达式,但是这有一个前提,你要回正则表达式
    每一次写正则表达式都是一脸懵逼,最后还是网上down了一个函数


  function getCookie(name)
    {
        var arr,reg=new RegExp("(^| )"+name+"=([^;]*)(;|$)");
        if(arr=document.cookie.match(reg)){
            return unescape(arr[2]);
        }
        else
            return null;
    }

    document.cookie="name=strong";
    console.log(getCookie(name))  //strong

**当然也要注意当使用编码函数对特殊字符编码时,获取时要进行解码**

一些其他属性

有效期

w3c上面经典的代码:

function setCookie(c_name, value, expiredays){
    var exdate=new Date();
    exdate.setDate(exdate.getDate() + expiredays);
    document.cookie=c_name+ "=" + escape(value) + ((expiredays==null) ? ""
               : ";expires="+exdate.toGMTString());
  }
  
使用方法:setCookie('username','Darren',30);

在上面的代码中,设置的时间是以 '天' 来为单位的,
exdate.setHours(exdate.getHours() + expiredays);这样就是一小时计算,当然
参数中的expiredays也就是期望的小时数。

路径

一.cookie 路径概念

在基础知识中有提到 cookie 有域和路径的概念,现在来介绍路径在 cookie 中的作用。

cookie 一般都是由于用户访问页面而被创建的,可是并不是只有在创建 cookie 的页面才可以访问这个 cookie。

默认情况下,只有与创建 cookie 的页面在同一个目录或子目录下的网页才可以访问,这个是因为安全方面的考虑,造成不是所有页面都可以随意访问其他页面创建的 cookie。举个例子:

在 "http://www.cnblogs.com/Darren_code/" 这个页面创建一个cookie,那么在"/Darren_code/"这个路径下的页面如: "http://www.cnblogs.com/Darren_code/archive/2011/11/07/Cookie.html"这个页面默认就能取到cookie信息。

可在默认情况下, "http://www.cnblogs.com"或者 "http://www.cnblogs.com/xxxx/" 就不可以访问这个 cookie(光看没用,实践出真理_)。

那么如何让这个 cookie 能被其他目录或者父级的目录访问类,通过设置 cookie 的路径就可以实现。例子如下:


  document.cookie = "name=value;path=path"
  document.cookie = "name=value;expires=date;path=path"

最常用的例子就是让 cookie 在跟目录下,这样不管是哪个子页面创建的 cookie,所有的页面都可以访问到了:


  document.cookie = "name=Darren;path=/"

路径能解决在同一个域下访问 cookie 的问题,咱们接着说 cookie 实现同域之间访问的问题。语法如下:

document.cookie = "name=value;path=path;domain=domain"

例如 "www.qq.com" 与 "sports.qq.com" 公用一个关联的域名"qq.com",我们如果想让 "sports.qq.com" 下的cookie被 "www.qq.com" 访问,我们就需要用到 cookie 的domain属性,并且需要把path属性设置为 "/"。例:

 document.cookie = "username=Darren;path=/;domain=qq.com"

注:一定的是同域之间的访问,不能把domain的值设置成非主域的域名。

相关文章

网友评论

      本文标题:cookie

      本文链接:https://www.haomeiwen.com/subject/tyrfettx.html