会话控制-Cookie

Cookie

cookie 是 HTTP 服务器发送到用户浏览器并保存在本地的一小块数据

  • cookie 是保存在浏览器端的一小块数据
  • cookie 是按照域名划分保存的

简单示例:

域名 cookie
www.baidu.com a=100; b=200
www.bilibili.com xid=1020abce121;hm=112411213
jd.com x=100;ocw=12414cce

浏览器向服务器发送请求时,会自动将 当前域名下 可用的cookie设置在请求头中,然后传递给服务器。

这个请求头的名字也叫 cookie,所以将cookie理解为一个HTTP的请求头也是可以的。

填写账号和密码校验身份,校验通过后下发 cookie

服务器在返回cookie时也是通过响应报文传递的,在这个响应报文中有一个特殊的响应头 set-cookie ,在 set-cookie 中设置 cookie 的内容;当这个报文内容在返回给浏览器后,浏览器再解析这个响应报文,发现里面有一个 set-cookie,它(浏览器)此时就知道后边的内容需要在本地做一个存储了。于是乎,就把这个cookie信息保存在当前域名的cookie下面了。当保存完以后,在浏览器下次再向该服务器发送请求时,就会自动携带这个域名下面的cookie了,传递给服务器。此时服务器就可以通过对携带过来的 cookie 中的 name=zhangsan 的信息进行解析,从而得知这个请求的发送者是zhangsan,从而实现了会话控制的功能。

有了 cookie 之后,后续向服务器发送请求时,就会自动携带 cookie。

npm init 创建工程

设置一个路由规则如下:

使用 nodemon 01-cookie.js 启动服务器,浏览器打开F12,然后访问 http://localhost:3000/set-cookie 地址:
此时我们查看请求头中并没有相关cookie的内容:

但是服务端在返回响应时,要求 res.cookie('name', 'zhangsan'); 设置cookie,因此浏览器就在响应报文中设置了如下的cookie内容了。

接下里我们验证下,到底这个域名下有没有cookie,看如下示意:

接下来,当我们第二次再发送 /set-cookie 请求时,就可以看到在请求头中带有 name=zhangsan 的这个 cookie 了:

当这个请求发送到服务端后,服务端对这个内容进行一个解析,就可以知道这个请求是 name是zhangsan 的请求者发送的了。

我们经常看见有些网站提供了七天免登录功能,那是怎么做的呢?欸,其实啊上面这个方法还有第三个可选参数,如下:

这时候当我们再访问 http://localhost:3000/set-cookie 时,就可以看到在响应报文的cookie中有过期时间设置了:

当过期时间一到,在接下来的请求头中就不会再有cookie了。设置了过期时间的cookie,如果没到过期时间,及时关闭了浏览器,cookie也不会失效


posted @ 2023-08-10 20:43  LoremMoon  阅读(15)  评论(0编辑  收藏  举报