【浏览器】cookie
2023/01/15 11:48:01
cookie 介绍
http 协议是无状态的,服务端无法确定请求来自哪个用户,cookie 就是为了解决这个问题而出现的。
cookie 是在客户端存储的一段字符串,通常用来保存当前客户端与服务端的会话状态,比如:用户初次进入网站后由后端设置一个 id,后续访问网站时携带着这个 id,这样服务端就能标记用户了。
cookie 属性
属性名 | 功能 | 示例 | 备注 |
---|---|---|---|
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.com 。
需要注意,如果同时设置了 Secure
和 SameSite:None
但是使用 http
协议时会导致 cookie
失效。