关于前端:前端cookie详解

4次阅读

共计 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 值为 StrictLax
  • 降级站点为 HTTPS
正文完
 0