Cookies

257 阅读2分钟

本文已参与掘金创作者训练营第三期「高产更文」赛道,详情查看:掘力计划|创作者训练营第三期正在进行,「写」出个人影响力

是什么

  1. web服务器存储在你本地磁盘的一个小的文本文件
  2. cookie记录了你的用户名,密码,浏览的网页等

属性

  1. Expires ,Max Age:
  1. 都用来指定cookie的过期时间; 2. Expires在HTTP/1.0中定义。max-age在HTTP/1.1中才有定义; 3. Expires指定一个绝对的过期时间(GMT格式)。max-age 指定的是从文档被访问后的存活时间,这个时间是个相对值(比如:3600s),相对的是文档第一次被请求时服务器记录的Request_time(请求时间),
  1. Domain和Path

Domain是域名,Path是路径,两者加起来就构成了 URL,Domain和Path一起来限制 cookie 能被哪些 URL 访问。

  1. size

cookie的大小

  1. Secure

Secure选项用来设置cookie只在确保安全的请求中才会发送。当请求是HTTPS或者其他安全协议时,包含 Secure选项的 cookie 才能被发送至服务器。

  1. httpOnly

设置cookie是否能通过 js 去访问

客户端设置cookie

方法:

document.cookie=“name=123;

注意:

document.cookie="name=syl; age=18"

这样的话只有name生效,即每次只能设置一个。因此需要封装或者多次调用。 封装:

//设置cookies
function setCookie(name,value,MyDay){
    var ExDate = new Date();
    ExDate.setDate(ExDate.getDate() + MyDay);//如果需要时间的话以这样获取。
    document.cookie = name + "=" + value + ";expires=" + ExDate;
}
//获取cookies
function getCookie(name){
    //例如cookie是"username=abc; password=123"
    var arr = document.cookie.split('; ');//用“;”和空格来划分cookie
    for(var i = 0 ;i < arr.length ; i++){
        var arr2 = arr[i].split("=");
        if(arr2[0] == name){
            return arr2[1];
        }
    }
    return "";//整个遍历完没找到,就返回空值
}
//删除cookies
function removeCookie(name){
    setCookie(name, "1", -1)//第二个value值随便设个值,第三个值设为-1表示:已经过期。
}

缺点

  1. 每个特定域名下的cookie数量有限,E6或更低版本最多20个cookie,IE7及之后可以有50个cookie,firefox最多50个cookie;

  2. 存储量太小,只有4KB;

  3. 每次HTTP请求都会发送到服务端,影响获取资源的效率;

  4. 安全性问题。如果在传输cookies或者操作cookies的时候,不小心泄露了,拦截者不需要对cookies进行解密,直接转发就可以使用了。现在很多的爬虫,在爬取之前会先回去网站的cookies,然后利用这些信息模拟用户,进行数据的抓取。