首先再说Cookie之前,我们不得不提到的一个东西,HTTP协议,众所周知,HTPP是一个无状态协议,
什么叫做无状态协议呢,我们可以提到一个案例来给大家解释,
假如我们现在有个demo是购物车,我们需要加入购物车这个功能,由于无状态协议是一个类似匿名的状态,
所以如果进行同样的两次加入购物车的操作,由于服务端并不知道客户端其实是同一个人发出的加入购物车的操作
当你刷新页面,加入的商品就没了...
那么进入我们今天的主题 Cookie
Cookie:一般不超过4K的小型文本数据 一般保存在本地计算机中
比如Mac系统中Cookie就保存在~/Library/Application Support/Google/Chrome/Default ,首先我们要明白Cookie并不是为了解决上述加入购物车而产出的东西,cookie的初衷是为了解决网页客户端与服务端会话的问题,那么大家可能会有疑惑,cookie是如何种到我本地的呢,其实是这样,我们请求服务端接口成功之后,服务端返回 Response Headers中会有set-cookie字段这些就是我们即将种入cookie的数据,我们来看一张图就明白
![](https://img.haomeiwen.com/i15167283/3c4efbf4006b769f.png)
cookie种植流程是这样的
- 1、客户端请求服务端
- 2、服务端收到请求返回头带有setcookie信息
- 3、客户端将setcookie内容储存至cookie中
- 4、之后的每次请求都会将cookie请求信息带入请求头
这就是一个完整的cookie流程
接下来,我们看看cookie之中的一些属性
首先,毋庸置疑,cookie一定会有name/value,这点不过多解释
Expires:这个属性决定了cookie的过期时间,可以使用时间戳,标准日期等,如置空的话表明该cookie是会话级cookie 网页关闭就清除
Max-age cookie失效之前需要经过的秒数,当为-1时为会话级cookie 当为0时为立即失效 可以为时间戳式,假如 Expires 和 Max-Age 都存在,Max-Age 优先级更高。
Domain:可以指定cookie发送的主机 例如Domain=.taobao.com 就是只有当顶级域名为Domain时才会发送到头部
Path 只有请求中带有path指定的路径才会在头部去携带cookie path定义了cookie的作用域
接下来到了我们的重头戏 samsite
samsite共有三个参数
Strict 仅允许一方请求携带 Cookie,即浏览器将只发送相同站点请求的 Cookie,即当前网页 URL 与请求目标 URL 完全一致。
Lax 允许部分第三方请求携带 Cookie
None 无论是否跨站都会发送 Cookie
之前默认是 None 的,Chrome80 后默认是 Lax。
samsite可能很多人听起来都会感觉陌生,当年这个东西在阿里也是掀起了不小的风波,谷歌80版本发布无法接手第三方cookie影响了很多部门,阿里妈妈 闲鱼 闲鱼的广告 等等等等,
淘宝的请求大多数都为jsonp 如果默认为Lax的话就导致了很多问题,最终也是用setcookie为smsite=none解决了问题
网友评论