cookie在浏览器端存储少量数据(key-value),解决http协议无状态的问题。在浏览器发送的请求是没有状态的,就不知道是谁发的请求。过程:首先客户端是没有cookie的,客户端向服务器发送登录请求,服务器一旦接受到你登录成功,就会返回一个的东西代表你登录成功,这个东西就会用cookie存着返回给客户端,客户端一旦接受到响应中有个cookie,客户端也会自动存起来,当下一次客户端再发请求的时候,客户端会自动携带上cookie,服务端就可以通过解析这个cookie就可以知道当前这个登录的用户是哪一个,从而返回给它相应的响应。所以在通信的过程中,我们会借助cookie存储一些用户的一些信息。
①.cookie是什么?
在浏览器端存储少量数据(key-value)
解决http协议无状态的问题
②.使用:设置res.cookie(key, value, options)
获取app.use(cookieParser()); req.cookies
清除res.clearCookie(key)
③.时效性:cookie默认是会话存储。(关闭浏览器会话就结束,结束就会自动销毁cookie)
持久化cookie
res.cookie(‘name’, ‘jack’, { maxAge: 1000 * 3600 * 24 * 7 }); 7天后过期
res.cookie(‘name’, ‘jack’, { maxAge: 1000 * 3600 * 24 * 365 * 10 }); 10年,永久过期
④.缺点:
存储容量小: 通常同一个域名下数量只有20个左右,每个大小为4kb左右
传输流量大: 每次发送请求浏览器都会把所有cookie自动携带上
安全性低:在传输过程中可能被人截取到。

const express = require('express');
const app = express();
//下载中间件解析cookie:npm i cookie-parser
const cookieParser = require('cookie-parser')
// 使用第三方中间件:解析cookie数据,挂载到req.cookies
app.use(cookieParser())

app.get('/', (req, res) => {
  //设置cookie
  res.cookie('name', 'tom',{
  //Application中打开Cookies中可以看到Expires/Max-Age中返回的不是Session,而是一个时间,现在设置的是7天的有效期,所以时间也是从当前时间向后推迟7天,相差8个小时是因为中国位于东八区。
    maxAge: 1000 * 3600 * 24 * 7,
  //不设置httpOnly:true在console中打印document.cookie可以获取设置的cookie,设置httpOnly:true在console中打印document.cookie不可以获取设置的cookie。设置httpOnly:true,Application中打开Cookies中可以看到HttpOnly打上了对号。设置httpOnly:true只能在服务端获取,客户端获取不了。我们不希望被别人拿到自己的cookie。
    httpOnly:true
  });
  // 获取cookie
  console.log(req.cookies);//{ name: 'tom' }
  console.log(req.headers.cookie);//name=tom
  console.log(typeof req.headers.cookie);//string
  // 清除cookie
  res.clearCookie('name');
  res.send('返回的响应');
});

app.listen(3000, (err) => {
  if (!err) console.log('服务器启动成功了~ http://localhost:3000');
  else console.log(err);
});

运行js文件 在Network的localhost中的Headers中的Request Headers中可看到自己设置的cookie,Cookie: name=tom。或者在Application中打开Cookies中也可以看到。