cookie

HTTP cookie是由网站发送的一小块数据,用户在浏览时将其存储在用户的web浏览器上

概念

它以键值对的方式信息存储于用户硬盘,保存有关访问者的信息,它既可以在服务端设置也可以在客户端设置。

cookie被设计成一个可靠的机制,可以让网站记住有状态的信息(比如在网上商店里添加的商品),或者记录用户的浏览活动(包括点击特定的按钮,登录,或者记录过去访问过的页面)。它们还可以用来记住用户之前输入的表单字段的任意信息,比如姓名、地址、密码和信用卡号。

cookie的常设置的属性:Domain、Path、Expires/Max-age、HTTP、Secure,接下来我们以express作为服务端来看看cookie这几个属性

属性

Domain、Path

这两个属性表示cookies在哪个主域下的哪个路径下表示cookies可以共享。

比如,我在服务端在两个路由页面设置cookie,当访问/和/Child后,cookie信息是页面共享的

图片描述
图片描述

但修改path后,只能在path设置的路径下,可以共享cookie,而其它页面是不能共享。

app.get('/Child', function(req, res, next) {
    res.cookie('nameChild', 'Child', { path: '/Child' });
    res.render('index', { title: 'Child' });
});

Expires/Max-age

这个属性表示cookie的存储时间,存储的单位标准是GMT,即格林威治时间。
例如设置time=1的存储时间为60秒

var date = new Date();
date.setTime(date.getTime() + 60000);
document.cookie = "time=1" + ";expires=" + date.toUTCString();

图片描述

max-age也是设置过期时间,但是它的单位是毫秒

同样将expire设置成一个过去的时间或者讲max-age=0,都能够达到删除cookie的效果

HttpOnly和secure

这两个属性都是基于cookie安全的,单位都是布尔值。

设置了HttpOnly,就禁止页面js修改cookie属性。

设置secure为true后,客户端只能通过https协议才能把cookie发送到服务端

不足

  1. cookie是明文传输,容易被拦截或者捕获内容
  2. cookie容量只有4KB,容量小
  3. 每次发送cookie,cookie都被添加到request header上,意味着cookie越大,请求头就越大,响应的时间就越长

总结

当访问web站点的,浏览器首先检索有没有与该站点相关联的cookie,如果有,就把cookie和并到请求头那里,随http请求一并发送到服务端,服务端和客户端都可以操作cookie,有一些操作cookie的属性,比如domain和path限制cookie的作用范围,Expires/Max-age决定cookie的存储时限,HttpOnly和secure限制cookie相关安全的操作,
cookie因为自身特点,适合存储一些不敏感,容量小的数据。


NicolaChin
35 声望2 粉丝

互相交流和提高