本文为总结性文章。
- HTTP Cookie是什么?
答: HTTP Cookie(也叫 Web Cookie 或浏览器 Cookie)是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上。 - 怎么创建Cookie?
答: 当服务器收到HTTP请求时,服务器可以在响应头里添加一个Set-Cookie选项,浏览器收到响应后通常会保存下 Cookie,之后对该服务器每一次请求中都通过 Cookie 请求头部将 Cookie 信息发送给服务器。另外,Cookie 的过期时间、域、路径、有效期、适用站点都可以根据需要来指定。Set-Cookie: <cookie名>=<cookie值>
- Cookie 的生命周期怎么定义?
答: 会话期 Cookie 是最简单的 Cookie:浏览器关闭之后它会被自动删除,也就是说它仅在会话期内有效。会话期Cookie不需要指定过期时间(Expires)或者有效期(Max-Age)。需要注意的是,有些浏览器提供了会话恢复功能,这种情况下即使关闭了浏览器,会话期Cookie 也会被保留下来,就好像浏览器从来没有关闭一样,这会导致 Cookie 的生命周期无限期延长。
持久性 Cookie 的生命周期取决于过期时间(Expires)或有效期(Max-Age)指定的一段时间。 - 安全性有哪些?
答: 会话固定攻击,用户进行身份验证时,重新生成并重新发送会话Cookie,甚至是一句存在的会话Cookie。这样有助于防止会话固定攻击,在该攻击中第三方可以重用用户的会话。
跨站点脚本。两种方法可以确保 Cookie 被安全发送,并且不会被意外的参与者或脚本访问:Secure 属性和HttpOnly 属性。Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT; Secure; HttpOnly
。
跨站请求伪造攻击,CSRF。SameSite Cookie 允许服务器要求某个 cookie 在跨站请求时不会被发送,可阻止CSRF。Set-Cookie: key=value; SameSite=Strict
。(注意: SameSite有三种值,None:浏览器会在同站请求、跨站请求下继续发送 cookies,不区分大小写,Strict:浏览器将只在访问相同站点时发送 cookie,Lax:与 Strict 类似,但用户从外部站点导航至URL时(例如通过链接)除外)。 - Cookie用于哪些方面
答: 1) 会话状态管理(如用户登录状态、购物车、游戏分数或其它需要记录的信息)
2) 个性化设置(如用户自定义设置、主题等)
3) 浏览器行为跟踪(如跟踪分析用户行为等)