会话控制-Cookie
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
,所以将cookie理解为一个HTTP的请求头也是可以的。
cookie 的运行流程
填写账号和密码校验身份,校验通过后下发 cookie
服务器在返回cookie时也是通过响应报文传递的,在这个响应报文中有一个特殊的响应头
set-cookie
,在set-cookie
中设置 cookie 的内容;当这个报文内容在返回给浏览器后,浏览器再解析这个响应报文,发现里面有一个set-cookie
,它(浏览器)此时就知道后边的内容需要在本地做一个存储了。于是乎,就把这个cookie信息保存在当前域名的cookie下面了。当保存完以后,在浏览器下次再向该服务器发送请求时,就会自动携带这个域名下面的cookie了,传递给服务器。此时服务器就可以通过对携带过来的cookie
中的name=zhangsan
的信息进行解析,从而得知这个请求的发送者是zhangsan,从而实现了会话控制的功能。
有了 cookie 之后,后续向服务器发送请求时,就会自动携带 cookie。
express 中设置 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也不会失效
删除 cookie
读取 cookie
本文来自博客园,作者:LoremMoon,转载请注明原文链接:https://www.cnblogs.com/hello-cnblogs/p/17621462.html