cookie的基本概念

cookie的基本概念
 
cookie是存储在浏览器的一段数据,由于http协议是无状态的,为了识别用户信息,服务端会把session存储到cookie上,后续的请求会在请求头携带cookie发送给服务端,一般不超过4kb。通常,它用于告知服务端两个请求是否来自同一浏览器,如保持用户的登录状态。
 
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 标记
 
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
 
cookie安全
 
由于客户端能够直接通过js来操作cookie,这样无疑很容易被不良少年利用,但并不代表不能用,为了提高 cookie 的安全,可以通过以下解决方法
 
设置 HttpOnly,例如NodeJs的设置方法如下
 
response.setHeader(’Set-Cookie’, ‘foo=bar; HttpOnly’);
 
给 cookie 设置超期时间,设置 SameSite 值为 Strict 或 Lax
 
升级站点为 HTTPS

如需转载,请注明文章出处和来源网址:http://www.divcss5.com/html/h64744.shtml

张贴在3