什么是会话 Cookie?

会话 Cookie 是关闭浏览器时即被删除的临时 Cookie。了解会话 Cookie 的工作原理、示例、与持久 Cookie 的区别、安全性以及 GDPR 同意规则。

什么是会话 Cookie?

会话 Cookie(Session Cookie)是网站在你访问期间存放在浏览器内存中的小型文本文件。它没有过期日期,所以浏览会话结束时(通常是关闭浏览器时)浏览器就会删除它。网站用会话 Cookie 在不同页面之间记住一些信息,例如你已登录,或者购物车里有哪些商品。

会话 Cookie 也被称为临时 Cookie(transient cookie 或 temporary cookie)、内存 Cookie(in-memory cookie)或非持久性 Cookie(non-persistent cookie)。

会话 Cookie 的主要特征

属性会话 Cookie
有效期直到浏览器会话结束
过期日期无:未设置 Expires 或 Max-Age 属性
存储位置浏览器内存中,不会作为长期 Cookie 写入磁盘
常见内容一个随机会话 ID,指向保存在服务器上的数据
常见用途登录、购物车、多步骤表单、安全令牌、负载均衡
来源通常是第一方 Cookie,由你正在访问的网站设置
GDPR 下是否需要同意严格必要时不需要;用于分析或广告时需要

会话 Cookie 是如何工作的?

HTTP 是无状态的:浏览器每次请求页面时,服务器都把它当作一个全新的、互不相关的请求。会话 Cookie 让服务器能够在不同页面之间识别出同一位访客。

  1. 你打开一个网站。服务器创建一个会话,并生成一个随机、难以猜测的会话 ID。
  2. 服务器通过 Set-Cookie 标头把这个 ID 发送给浏览器,且不带 Expires 或 Max-Age 属性。正是因为没有过期日期,它才成为会话 Cookie。
  3. 浏览器把这个 Cookie 保存在内存中,并在每次向同一网站发送请求时一并发回。
  4. 服务器读取会话 ID,加载你的会话数据,例如登录状态或购物车。
  5. 关闭浏览器后,这个 Cookie 就会被丢弃。服务器端的会话通常在一段时间无操作后超时。

会话 Cookie 示例

设置会话 Cookie 的服务器响应如下:

Set-Cookie: sessionid=a3fWa9Kx72Lp; Path=/; Secure; HttpOnly; SameSite=Lax

相比之下,持久性 Cookie 会包含过期时间:

Set-Cookie: lang=en; Path=/; Max-Age=31536000; Secure; SameSite=Lax

在 JavaScript 中,未设置过期时间的 Cookie 同样是会话 Cookie:

document.cookie = "step=2; path=/; Secure; SameSite=Lax";

常见的会话 Cookie 名称包括 PHPSESSID(PHP)、JSESSIONID(Java)、ASP.NET_SessionId(ASP.NET)、connect.sid(Node.js Express)和 sessionid(Django)。

会话 Cookie 有什么用途?

  • 让用户在不同页面之间跳转时保持登录状态
  • 在结账前记住购物车中的商品
  • 在多步骤表单和结账流程中传递数据
  • 安全用途,例如 CSRF 令牌和检测多次登录失败
  • 负载均衡,在一次访问期间把访客路由到同一台服务器
  • 本次访问的临时偏好设置,例如所选语言或货币
  • 媒体播放器设置,例如访问期间的缓冲状态或播放位置

会话 Cookie 与持久性 Cookie 的区别

会话 Cookie持久性 Cookie
过期时间浏览器会话结束时到指定日期,或经过指定秒数后
设置方式不设置 Expires 或 Max-Age设置 Expires 或 Max-Age 属性
存储浏览器内存写入磁盘,关闭浏览器后仍然保留
关闭浏览器后是否保留否(除非开启了会话恢复)
常见用途登录状态、购物车、安全、负载均衡“记住我”、已保存的偏好设置、分析、广告
跨访问跟踪
GDPR 下是否需要同意作为严格必要 Cookie 通常可豁免通常需要,除非属于严格必要

很多网站两者都会使用。例如,登录系统可能用会话 Cookie 处理本次访问,再用一个持久性的“记住我” Cookie 让你下周自动重新登录。

关闭浏览器后会话 Cookie 真的会过期吗?

不一定。如果浏览器设置为恢复上次的会话,例如 Chrome 的“继续浏览上次打开的网页”或 Firefox 的“打开先前的窗口和标签页”,重启后可能仍会保留会话 Cookie。有些移动浏览器因为应用从未被完全关闭,几乎不会结束会话。因此,服务器也应在一段时间无操作后自行让会话过期。

会话 Cookie、Session Storage 与服务器会话的区别

这几个术语经常被混淆:

  • 会话 Cookie 是没有过期日期的 Cookie。它会随每次请求发送到服务器。
  • Session Storage(window.sessionStorage)是一种浏览器存储 API。它仅限于单个标签页,不会自动发送到服务器,并在标签页关闭时被清除。
  • 服务器端会话是服务器保存的关于访客的数据,例如用户 ID 和购物车。会话 Cookie 通常只保存把浏览器与这些数据关联起来的 ID。

更多内容请参阅我们的 Cookie 与本地存储指南。

第一方与第三方会话 Cookie

大多数会话 Cookie 是第一方 Cookie:它们由地址栏中的域名设置,用于让该网站正常运行。嵌入在页面中的第三方服务,例如支付组件、聊天工具或视频播放器,也可以在自己的域名下设置会话 Cookie。浏览器对第三方 Cookie 的限制越来越多,因此这类 Cookie 不如第一方 Cookie 可靠。

会话 Cookie 安全吗?

会话 Cookie 不包含病毒,也不能运行代码。它们通常只保存一个随机 ID。风险在于,任何窃取到有效会话 ID 的人都可以在会话结束前冒充该用户。这被称为会话劫持。

使用以下属性和做法来保护会话 Cookie:

  • HttpOnly 阻止 JavaScript 读取 Cookie,可减少跨站脚本攻击(XSS)造成的损害。
  • Secure 只通过 HTTPS 发送 Cookie。
  • SameSite=Lax 或 Strict 限制 Cookie 在跨站请求中发送的时机,有助于防范 CSRF。
  • __Host- 名称前缀将 Cookie 锁定在你的确切域名并只通过 HTTPS 使用。
  • 生成较长的随机会话 ID,切勿在 Cookie 值中放入个人数据。
  • 登录后签发新的会话 ID,以防范会话固定攻击。
  • 在服务器端让闲置会话过期,并在用户退出登录时使其失效。

会话 Cookie 在 GDPR 下需要征得同意吗?

这取决于 Cookie 的用途,而不是它的有效期长短。根据《电子隐私指令》(ePrivacy Directive)第 5(3) 条,存储或读取 Cookie 需要事先征得同意,除非该 Cookie 对用户所请求的服务是严格必要的。GDPR 规定了这种同意的标准,并适用于 Cookie 收集的任何个人数据。

第 29 条工作组关于 Cookie 同意豁免的第 04/2012 号意见列出了无需征得同意的典型 Cookie。其中很多是会话 Cookie:

  • 用户输入 Cookie,例如购物车或表单数据,在会话期间有效
  • 身份验证 Cookie,在会话期间有效
  • 以用户为中心的安全 Cookie,例如用于检测多次登录失败的 Cookie
  • 多媒体播放器会话 Cookie
  • 负载均衡会话 Cookie
  • 用户界面自定义 Cookie,例如语言偏好,在会话期间或之后数小时内有效

如果会话 Cookie 用于分析、广告、社交媒体跟踪或任何非严格必要的用途,仍然需要征得同意。有效期短并不能让跟踪 Cookie 获得豁免。

即使不需要征得同意,你仍然必须告知用户你使用了哪些 Cookie,通常通过 Cookie 政策或 Cookie 声明来说明。英国 PECR、美国加州 CCPA/CPRA 以及其他隐私法律对 Cookie 披露也有类似规定。

如何在浏览器中查看会话 Cookie

  1. 打开网站后按 F12,或者右键点击并选择“检查”,打开开发者工具。
  2. 在 Chrome 或 Edge 中,依次进入“应用”、“存储”、“Cookie”。在 Firefox 中,依次进入“存储”、“Cookie”。在 Safari 中,依次进入 Storage、Cookies。
  3. 选择该网站的域名。
  4. 查看 Expires / Max-Age 列。会话 Cookie 显示为“Session”(中文界面为“会话”),而不是日期。

如需一次性检查你网站上的所有 Cookie,包括哪些是会话 Cookie,可以使用 UniConsent Cookie 检查工具免费扫描。

如何删除会话 Cookie

  • 关闭所有浏览器窗口。如果开启了会话恢复,请将其关闭或手动清除 Cookie。
  • 在浏览器设置中清除某个网站的 Cookie,或清除所有浏览数据。
  • 退出网站登录,这通常会结束服务器端的会话。
  • 使用无痕或隐身窗口。关闭窗口时,其中的所有 Cookie,无论是会话 Cookie 还是持久性 Cookie,都会被删除。

UniConsent 如何处理会话 Cookie

UniConsent 是一个获得 Google 认证并在 IAB Europe 注册的同意管理平台(CMP)。它帮助你将会话 Cookie 与网站上的其他所有 Cookie 一起管理:

  • Cookie 扫描器会找出你网站上的所有 Cookie,并记录每个 Cookie 是会话 Cookie 还是持久性 Cookie。
  • Cookie 会被归入严格必要、分析和营销等类别,Cookie 声明也会自动保持更新。
  • 严格必要的会话 Cookie 可以继续正常工作,而分析和广告 Cookie 会被阻止,直到访客表示同意。
  • 同意选择会传递给 Google Consent Mode v2 和 IAB TCF 供应商。

常见问题

会话 Cookie 能保留多久?

会话 Cookie 会一直保留到浏览器会话结束,通常是在你关闭浏览器时。如果浏览器在重启时恢复会话,它可能保留更久。它所指向的服务器端会话往往更早超时,通常是在无操作 15 到 30 分钟后。

会话 Cookie 存储在哪里?

存储在浏览器内存中。它们不会作为长期 Cookie 保存到磁盘上,不过开启会话恢复的浏览器可能会临时保存它们,以便重新打开你的标签页。

会话 Cookie 会跟踪我吗?

单独一个会话 Cookie 无法在多次访问之间跟踪你,因为它会在会话结束时被删除。但在一次访问中,它可以把你浏览的各个页面关联起来,这也是为什么用于分析或广告的会话 Cookie 在 GDPR 下仍需征得同意。

会话 Cookie 属于个人数据吗?

可能属于。GDPR 将在线标识符(例如与已登录用户关联的会话 ID)视为个人数据,前提是它们可用于识别某个人。

我应该屏蔽会话 Cookie 吗?

不建议这样做。屏蔽会话 Cookie 会导致大多数网站的登录、购物车和结账功能无法使用。如果想减少跟踪,更好的做法是屏蔽第三方 Cookie,并在同意横幅中拒绝非必要 Cookie。

会话 Cookie 和会话 ID 有什么区别?

会话 ID 是在服务器上标识你的会话的随机值。会话 Cookie 是在浏览器中存储这个 ID 并随每次请求发回的最常见方式。

延伸阅读

使用 UniConsent 管理会话 Cookie

  • Cookie扫描和披露
  • JavaScript标签阻止和Cookie阻止
  • 支持 Google Consent Mode v2
  • 经过认证的IAB CMP
  • 一标签实施
  • 多语言支持
  • 简单的自助解决方案
  • 了解更多信息,请访问 关于Cookie

Microsoft certified CMP - UniConsent CMPIAB certified CMP - UniConsent CMPIAB TCF V2 certified CMP - UniConsent CMPIAB TCF Canada certified consent manager - UniConsent CMPGoogle-certified CMP Gold tire - UniConsent CMPGoogle-certified CMP partner

遵守全球隐私法规

受全球5000多家出版商和营销人员的信赖
  • sej
  • football365
  • sharethrough
  • districtm
  • pf1
  • tower cast

开始使您的网站和应用符合欧盟 GDPR、美国 CPRA、加拿大 PIPEDA 等法规

注册