共计 1604 个字符,预计需要花费 5 分钟才能阅读完成。
原文地址
cookie 的基本概念
cookie 是存储在浏览器的一段数据,因为 http 协定是无状态的,为了辨认用户信息,服务端会把 session 存储到 cookie 上,后续的申请会在申请头携带 cookie 发送给服务端,个别不超过 4kb。通常,它用于告知服务端两个申请是否来自同一浏览器,如放弃用户的登录状态。
<!– truncate –>
<div className=”google-adsense” data-slot=”4036845214″ />
cookie 应用场景
- 会话状态治理(登录状态,购物车,游戏分数)
- 个性化设置(自定义主题)
- 浏览器行为跟踪(跟踪剖析用户行为)
cookie 的定义
Set-Cookie: name=value[; expires=date][; max-age=secondes][; domain=domain][; path=path][; secure][; HttpOnly][; SameSite=Lax|Strict]
name: cookie 的键,不辨别大小写
value: cookie 的值,必须 URL 编码
Expires: cookie 的过期工夫,值是 GTM 格局的,例如:Sat, 11 Dec 2021 13:06:06 GMT
,默认状况下,浏览器会话完结就会删除 cookie。不过也能够手动设置删除工夫
Max-Age: cookie 的有效期,单位 s 例如 token=123456; max-age=3600
,示意 cookie 有效期为 3600s
Domain: 指定域,例如 domain=blog.1024nav.com
则只会在 blog.1024nav.com
域下无效
Path: 指定门路匹配,不匹配则不会设置 cookie,例如 path=/blog
则只会在 /blog
门路下无效
Secure: 只能被 HTTPS 协定加密过的申请发送给服务端,因而能够预防中间人攻打
HttpOnly: cookie 只在 http 传输,客户端无奈通过 js document.cookie
获取到
SameSite: Set-Cookie: key=value; SameSite=Strict
,容许服务器要求某个 cookie 在跨站申请时不会被发送,从而能够阻止跨站申请伪造攻打
当初新版浏览器,例如 Chorme 或 Firefox,如果网站不上 HTTPS,就无奈应用 Cookie 的
Secure
标记
<div className=”google-adsense” data-slot=”6621456589″ />
cookie 前缀
cookie 能够应用自定义前缀,只有在 cookie 设置 Secure
指令,就能够蕴含 __Secure-
或者 __Host-
前缀,而且 Path 必须为整站 “/”
一个残缺的 cookie 例子
Set-Cookie: id=u8dd; Expires=Mon, 21 Oct 2021 07:28:00 GMT; Secure; HttpOnly
nodejs 设置 Cookie 的办法
response.setHeader('Set-Cookie', ['name=1024nav.com', 'Token=kjjijwe1231dsad']);
客户端操作 cookie
通过 document.cookie
属性可创立新的 cookie,也可通过该属性拜访非 HttpOnly
标记的 cookie
<div className=”google-adsense” data-slot=”5116803225″ />
cookie 平安
因为客户端可能间接通过 js 来操作 cookie,这样无疑很容易被不良少年利用,但并不代表不能用,为了进步 cookie 的平安,能够通过以下解决办法
- 设置
HttpOnly
,例如 NodeJs 的设置办法如下
response.setHeader('Set-Cookie', 'foo=bar; HttpOnly');
- 给 cookie 设置超期工夫,设置
SameSite
值为Strict
或Lax
- 降级站点为 HTTPS