【浏览器】cookie

2023/01/15 11:48:01

http 协议是无状态的,服务端无法确定请求来自哪个用户,cookie 就是为了解决这个问题而出现的。

cookie 是在客户端存储的一段字符串,通常用来保存当前客户端与服务端的会话状态,比如:用户初次进入网站后由后端设置一个 id,后续访问网站时携带着这个 id,这样服务端就能标记用户了。

属性名功能示例备注
Expires设置过期时间,到达该时间点时 cookie 失效。Expires=Wed, 21 Oct 2015 07:28:00 GMT;未设置 Expires 时表示该值为会话性 cookie,关闭浏览器后失效。需注意 cookie 失效时间是根据客户端的时间判断的。
Max-Age设置 cookie 多少毫秒后失效。Max-Age=604800;值为正数时浏览器将其视为持久化 cookie,存在本地文件中。值为负数时表示该 cookie 是一个会话性 cookie。值为 0 时,会立即删除这个 cookie。优先级高于 Expires。
Domain指定 cookie 在哪个域名下生效。Domain=baidu.com;不能跨域设置。设置为二级域名时,其所有的三级域名都可以访问,反之不行。
Path指定 cookie 在哪个路径下生效。Path=/docs;与 Domain 类似,设置为根路径时所有路径都可访问。Domain 和 Path 标识共同定义了 Cookie 的作用域:即 Cookie 应该发送给哪些 URL。
Secure指定客户端必须使用 https 协议发送cookie。Secure;设置后客户端可以接受 cookie,但是想要发送 cookie 就必须使用 https。
HTTPOnly指定 cookie 仅限服务端使用。HTTPOnly;设置后在浏览器中无法获取该 cookie(document.cookie)。
SameSite设置 cookie 跨站策略。SameSite=None;

SameSite

SameSite 属性可以设置 cookie 跨站策略,可以防止 CSRF 攻击和用户追踪(第三方恶意获取 cookie)。

可选值为:

  • Strict:严格限制,只有当前网站 url 与请求目标完全一致才会带 cookie。
  • Lax:宽松限制,部分请求可发送 cookie,默认值
  • None:不限制,所有跨站请求均发送 cookie,必须同步设置 Secure 属性

cookie 中对同站的判定是:有效顶级域名+二级域名,如 taobao.comopen in new window

需要注意,如果同时设置了 SecureSameSite:None 但是使用 http 协议时会导致 cookie 失效。

参考

预测最近面试会考 Cookie 的 SameSite 属性open in new window

Cookie 的 SameSite 属性open in new window