一文彻底搞懂Cookie

上一篇笔记,我们简要提到了Cookie和Session之间的区别,但并没有对Cookie进行详细介绍。因此,本文将详细介绍Cookie的相关内容。关于Session的内容将在后续的篇章中进行详细介绍。

我们都知道,HTTP 是一种无状态协议。这意味着每个 HTTP 请求都是独立的,不依赖于之前的请求。

那么什么是无状态呢?举个例子:

假如你去了一家商店,买了一件衣服,但你到家发现衣服质量有问题,于是,你去找店主,并告诉他问题。但无奈的是,他回答说他不认识你

这就是没有Cookie的HTTP的最初状况,网络服务器不认识你

后来随着交互式 Web 应用的兴起,比如: 在线购物网站,这就面临一个重要问题,我们需要追踪哪些用户已登录系统,哪些用户浏览了哪些商品,哪些用户将商品添加到购物车中。换句话说,我们需要区分每个用户的行为。

为了解决这个问题,Cookie登场了

什么是Cookie

Cookie 是浏览器保存在用户电脑上的一小段文本。它是由Web浏览器在用户浏览Web站点或Web应用程序时存储的。

通俗的来讲就是当一个用户第一次通过 HTTP访问到服务器时,服务器会生成Cookie,发送给浏览器,浏览器把 Cookie 以 kv 形式保存到某个目录下的文本文件内,下一次请求同一网站时会把该 Cookie 发送给服务器。由于 Cookie 是存在客户端上的,所以浏览器加入了一些限制确保 Cookie 不会被恶意使用,同时不会占据太多磁盘空间,所以每个域的 Cookie 数量是有限的。

也就是说, Cookie是服务器传给客户端并保存在客户端的一段信息,这个 Cookie是有大小,数量限制的!

为了更好的理解Cookie,接下来我们描述下 Cookie 生命周期

Cookie的生命周期

目前 Cookie 主要用于会话状态管理,以用户登录-退出登录为例,Cookie 的生命周期如下

在浏览器第一次通过用户登录 API 向服务器传递用户信息,服务器此时肯定不知道他的身份,服务器核对与数据库信息是否匹配,匹配后,创建一个独特的身份标识数据,格式为key=value,放入到Set-Cookie字段里,随着登录 API 响应报文发给浏览器

浏览器看到有Set-Cookie字段以后就知道这是服务器给的身份标识,于是浏览器按照 Set-Cookie的规则解析后存入浏览器,下次请求时会自动将此key=value值放入到Cookie字段中发给服务端。

服务端收到请求报文后,发现Cookie字段中有值,就能根据此值识别用户的身份然后提供个性化的服务。

那如果退出登录,返回头部的 Set-Cookie 会拜托浏览器帮忙删除 key=value,浏览器的 Cookie 储存库就会将 key=value 字段删除,后续的 API 请求头部 Cookie 也不会发送它。

那么浏览器的Cookie是存放在哪呢?

浏览器的Cookie存放位置 

方法一:

1. 在计算机上打开Chrome

2. 在右上角,点击更多图标->设置

3. 在隐私和安全下方,点击第三方Cookie

4. 底部点击:查看所有网站数据和权限,即可查看所有Cookie和网站数据,然后可以根据域名进行搜索所管理的Cookie数据

方法二:

在浏览器网址栏,点击查看网站信息(HTTP网址前是一个不安全的标志⚠,HTTP网址前是一个安全的标志🔒),再点击Cookie和网站数据,即可查看Cookie数据

所以是浏览器替你管理了Cookie的数据,如果此时你换成了Safari等其他的浏览器,因为Cookie刚才是存储在Chrome里面的,所以服务器又蒙圈了,不知道你是谁,就会给Safari再次贴上身份标识。

说到这里,应该知道了Cookie就是服务器委托浏览器存储在客户端里的一些数据,而这些数据通常都会记录用户的关键识别信息。所以Cookie需要用一些其他的手段用来保护,防止外泄或者窃取,这些手段就是Cookie的属性。

下面主要介绍下 Domain、Path、Max-Age、Expires 属性

Domain属性

Domain属性指定浏览器发出HTTP请求时,哪些域名要附带这个Cookie。如果没有指定该属性,浏览器会默认将其设为当前 URL 的一级域名,比如 www.example.com 会设为example.com,而且以后如果访问example.com的任何子域名,HTTP 请求也会带上这个 Cookie。如果服务器在Set-Cookie字段指定的域名,不属于当前域名,浏览器会拒绝这个 Cookie

Path属性

在HTTP协议中,当服务器向浏览器发送一个Set-Cookie时,会设定一个Path属性,用来限制该Cookie在哪个路径下有效。当浏览器再次访问服务器时,会检查请求的路径是否与Cookie中的Path属性匹配。如果匹配,浏览器将会在请求中携带该Cookie。换句话说,如果设置了Path属性,那么只有该路径及其子路径下的页面可以访问该Cookie。

例如,如果Path被设置为/forum,那么只有/forum以及其子路径(如: /forum/index.html)下的页面可以访问该Cookie。

这可以帮助服务器限制Cookie的作用范围,提高安全性,并减少不必要的数据传输

Max-Age&Expires属性

Cookie在Web开发中常用于存储用户的一些信息,例如登录状态、个性化设置等。Cookie的生命周期,也就是它何时被创建、何时被销毁,是通过一些参数来控制的。

Max-Age:这是一个相对的时间,指定了Cookie在创建后的多少秒内过期。

例如,Max-Age=3600表示Cookie在创建后的3600秒(也就是1小时)后过期。过了这个时间,浏览器就会自动删除这个Cookie。

Expires:这是一个明确的过期时间,指定了Cookie何时过期,它的值是 UTC 格式。例如,Expires=Wed, 21 Jul 2023 10:00:00 GMT表示Cookie将在指定时间过期。一旦过了这个时间,浏览器就会自动删除这个Cookie。

如果同时指定了Expires和Max-Age,那么Max-Age的值将优先生效

如果没有设置Expires和Max-Age,则默认有效期为Session,即会话Cookie。这种Cookie在浏览器关闭后就没有了。

关于Cookie,这次就分享到这里了~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值