cookie的那些事

作者: tiancai啊呆 | 来源:发表于2018-01-20 17:09 被阅读36次
    cookie简介

    cookie 是服务器保存在浏览器的一小段文本信息,浏览器每次向服务器发出请求,就会自动附上这段信息。

    cookie详解
    • cookie的属性
      一条cookie主要保存了五个方面的信息,分别是cookie的名字,cookie的值,到期时间,所属域名(默认是当前域名),生效路径(默认是当前网址)。
    • cookie的长度
      所有 cookie 的累加长度限制为4KB。超过这个长度的 Cookie,将被忽略,不会被设置。
    • cookie的通信
      浏览器每次请求时,在请求头中通过Cookie字段将cookie发送给服务器。
      服务器在响应头中,通过Set-Cookie字段将cookie发给浏览器。如果服务器加上了HttpOnly属性,则这个 cookie 无法被 JavaScript 读取。
      不同的是浏览器向服务器发送 cookie 的时候,是使用一行将所有 cookie 全部发送,而服务器告诉浏览器需要储存 cookie 的时候,则是分行指定。
    • cookie的获取
      浏览器通过document.cookie返回当前网页的 cookie(返回的是分号分隔的所有 cookie)。所以必须手动还原,才能取出每一个 cookie 的值。
    • cookie的设置
      document.cookie属性是可写的,可以通过它为当前网站添加 cookie。但是,document.cookie一次只能写入一个 cookie,而且写入并不是覆盖,而是添加。
      写入格式:value;expires=date;domain=domain;path=path;secure
      value属性是必需的,它是一个键值对,用于指定cookie的值(对分号、逗号和空格进行转义)。
      expires属性用于指定 cookie 过期时间。它的格式采用Date.toUTCString()的格式。
      domain属性指定 cookie 所在的域名。如果未指定,默认为设定该Cookie的域名。所指定的域名必须是当前发送Cookie的域名的一部分。
      path属性用来指定路径,必须是绝对路径。如果未指定,默认为请求该 Cookie 的网页路径。path属性生效的前提是domain属性匹配。
      secure属性用来指定cookie只能在加密协议HTTPS下发送到服务器,只是一个开关,不需要指定值。
      max-age属性用来指定cookie有效期,单位为秒。
      HttpOnly属性用于设置该cookie不能被JavaScript读取。
      以上可选属性可以同时设置一个或多个,也没有次序的要求。另外,这些可选属性只能用来设置 cookie。一旦设置完成,就没有办法读取这些可选属性的值。

    如果想改变一个早先设置的Cookie,必须同时满足四个条件:cookie的key、domain、path和secure都匹配。

    • cookie的删除
      删除一个cookie唯一方法是使其过期。
    cookie封装
    //设置cookie
    function setCookie(key,value,expires,domain,path) {
      var encodeKey = encodeURIComponent(key);
      var encodeValue = encodeURIComponent(value);
      var keyExpires = expires.toUTCString();
      document.cookie = encodeKey + '=' + encodeValue + ';expires=' + keyExpires + ';domain=' + domain + ';path=' + path;
    }
    //获取cookie
    function getCookie(key){
      var encodeKey = encodeURIComponent(key);
      var allCookie = document.cookie.split(';');
      var cookie,len = allCookie.length;
      for (var i = 0; i < len; i++) {
         cookie = allCookie[i].split('=');
         if (encodeKey == cookie[0]) {
             return cookie[1];
         }   
       }
       return '';
    }
    //删除cookie
    function delCookie(key,domain,path){
      var encodeKey = encodeURIComponent(key);
      var expires = new Date(0);
      document.cookie = encodeKey + '=' + ';expires=' + expires.toUTCString() + ';domain=' + domain + ';path=' + path;
    }
    

    最后推荐一下自己的通用函数库

    相关文章

      网友评论

        本文标题:cookie的那些事

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