一篇解释清楚Cookie是什么?

本文详细介绍了HTTP Cookie的定义、生成过程、第一方与第三方Cookie的区别,以及重要属性如Secure、HttpOnly、Domain、Path和SameSite的作用。此外,还探讨了操作Cookie的JavaScript API和相关库,并提醒了大量数据存储于Cookie的问题及其解决方案。
摘要由CSDN通过智能技术生成
一、Cookie 是什么?

HTTP Cookie(也叫 Web Cookie 或浏览器 Cookie)是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上。使用场景:

  • 会话状态管理(如用户登录状态、购物车、游戏分数或其它需要记录的信息)
  • 个性化设置(如用户自定义设置、主题等)
  • 浏览器行为跟踪(如跟踪分析用户行为等)

二、Cookie 生成过程
1、生成 cookie

服务器生成了 cookie 数据 并设置为 Set-Cookie 属性,包含在 HTTP 协议的 Header 中 ,来告诉浏览器保存这些数据(除非浏览器禁用了 Cookie)。

// 服务端发给浏览器的数据
HTTP/1.0 200 OK
Content-type: text/html
Set-Cookie: yummy_cookie=choco
Set-Cookie: tasty_cookie=strawberry

2、存储 cookie 并回传

浏览器会在接下来的请求中,把存储的 cookie 数据,设置为 Cookie 属性,包含 HTTP 协议的 Header 中 ,连同请求一起发送给服务器(除非设置了不发送 cookie)。

// 浏览器发给服务器的数据
GET /sample_page.html HTTP/1.1
Host: www.example.org
Cookie: yummy_cookie=choco; tasty_cookie=strawberry

三、第一方 和 第三方 Cookie
  • Cookie 中的域名 与 当前站点域名相同,称为 第一方cookie( first-party cookie);

  • Cookie 中的域名 与 当前站点域名不同,称为 第三方cookie( third-party cookie);

当前站点会使用一些其他站点资源(譬如图片、广告等),在请求第三方服务器获取这些资源时,也会返回 Set-Cookie 属性,让浏览器保留第三方的 cookie,这些cookie 主要用于用户跟踪,流量分析等。


四、cookie 的重要属性
1、Secure 和 HttpOnly

功能:限制访问 Cookie 的方式。

  • Secure :表示 cookie 只能用 https 加密的方式发送给请求站点;
  • HttpOnly :JavaScript API 无法访问带有 HttpOnly 属性的cookie(Document.cookie 无法读取cookie)当 cookie 中的数据,只用于服务器时,可以设置此属性;可防止通过 JavaScript 访问 cookie 值;
  • 这两个属性可以有效防御 大部分 XSS 攻击。
Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT; Secure; HttpOnly

2、Domain 和 Path

功能:允许 Cookie 发送给哪些URL?

  • Domain :表示 cookie 可以发送给那个域名包括其子域名。如果不设置Domain,就取值为 origin 但不包含origin 的子域名。如果设置 Domain=mozilla.org,那么 cookie 也能发送给子域名 developer.mozilla.org
  • Path :表示 cookie 可以发送给那些路径。如果 设置 Path=/docs,那么 cookie 也能发送给子路径 /docs/Web/

3、SameSite

功能:可以限制 cookie 的跨域发送,此属性可有效防止大部分 CSRF 攻击,有三个值可以设置:

  • None :同站、跨站请求都发送 cookie,但需要 Secure 属性配合一起使用。

    Set-Cookie: flavor=choco; SameSite=None; Secure
    
  • Strict :当前页面与跳转页面是相同站点时,发送 cookie;

    Set-Cookie: key=value; SameSite=Strict
    
  • Lax :与 Strict 类似,但用户从外部站点导航至URL时(例如通过链接)除外。 在新版本浏览器中,为默认选项,Same-site cookies 将会为一些跨站子请求保留,如图片加载或者 frames 的调用,但只有当用户从外部站点导航到URL时才会发送。如 link 链接


4、__Host-__Secure-

可以创建 cookie 的地方很多,很难判断 cookie 的来源,但是可使用 cookie 前缀来断言 cookie 的来源。

  • __Host-

    带有这个前缀的 cookie,必须具备这三个特性:有 Secure 属性、没有 Domain 属性、Path

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值