1、认识 Cookie
1.1 Cookie 的定义
HTTP Cookie(也称为 Web Cookie、浏览器 Cookie 或简称 Cookie)是服务器发送到用户浏览器并保存在浏览器上的一小块数据,它会在浏览器之后向同一服务器再次发起请求时被携带并发送到服务器上。通常,它用于告知服务端两个请求是否来自同一浏览器,如保持用户的登录状态、记录用户偏好等。 Cookie 的原意是曲奇,一块小的饼干,也就对应着在网络里表示一小块数据。
1.2 工作原理
- 当用户第一次访问网站时,服务器会在响应的 HTTP 头中设置 Set-Cookie 字段,用于发送 Cookie 到用户的浏览器。
- 浏览器在接收到 Cookie 后,会将其保存在本地(通常是按照域名进行存储)。
- 在之后的请求中,浏览器会自动在 HTTP 请求头中携带 Cookie 字段,将之前保存的 Cookie 信息发送给服务器。
Cookie 存储在浏览器上,当浏览器进行登录操作发送请求时,服务器会处理 Cookie。然后通过应答返回给浏览器,下一次浏览器再次申请时,就可以带着这个 Cookie 进行请求,服务器就可以直接识别账号等信息了。 也就是说有了 Cookie 的存在,我们不用每次登录网站都要输入自己的账号密码,网站能自动识别用户,因为将用户的数据存储在了 Cookie 当中。还可以标识用户状态,对用户的登录状态进行保持,方便随时验证用户身份,还能识别会员等级或游客状态。
1.3 Cookie 的分类
- 会话 Cookie(Session Cookie):存储在内存当中,在浏览器关闭时失效。
- 持久 Cookie(Persistent Cookie):存储在文件当中,带有明确的过期日期或持续时间,可以跨多个浏览器会话存在。
如果 Cookie 是一个持久性的 Cookie,那么它其实就是浏览器相关的,特定目录下的一个文件。但直接查看这些文件可能会看到乱码或无法读取的内容,因为 Cookie 文件通常以二进制或 sqlite 格式存储。一般我们查看,直接在浏览器对应的选项中直接查看即可。
安全性:由于 Cookie 是存储在客户端的,因此存在被篡改或窃取的风险。 用途:
- 用户认证和会话管理 (最重要)
- 跟踪用户行为
- 缓存用户偏好等
2、Cookie 详细机制
- HTTP 存在一个报头选项:Set-Cookie,可以用来给浏览器设置 Cookie 值。
- 在 HTTP 响应头中添加,客户端(如浏览器)获取并自行设置并保存 Cookie。
2.1 Cookie 基本格式
Set-Cookie: = 其中 是 Cookie 的名称, 是 Cookie 的值。
完整的 Set-Cookie 示例:
Set-Cookie: username=peter; expires=Thu, 18 Dec 2024 12:00:00 UTC; path=/; domain=.example.com; secure; HttpOnly
- name=value:指定 Cookie 的名称和值。这是必需的。
- expires=date:指定 Cookie 的过期时间。如果未设置,Cookie 默认在浏览器关闭时过期。
- domain=domain:指定 Cookie 的有效域。控制哪些域可以访问该 Cookie。
- path=path:指定 Cookie 的有效路径。控制哪些路径下的页面可以访问该 Cookie。
- secure:如果设置了该选项,Cookie 只能通过 HTTPS 协议传输,不能通过 HTTP 协议发送,增加安全性。
- httponly:如果设置了该选项,Cookie 将无法通过 JavaScript 脚本访问,有助于防止跨站脚本攻击(XSS)。
注意事项:
- 每个 Cookie 属性都以分号(;)和空格( )分隔。
- 名称和值之间使用等号(=)分隔。
- 如果 Cookie 的名称或值包含特殊字符(如空格、分号、逗号等),则需要进行 URL 编码。
2.2 Cookie 的生命周期
- 如果设置了 expires 属性,则 Cookie 将在指定的日期/时间后过期。


