会话 Cookie(Session Cookie)是网站在你访问期间存放在浏览器内存中的小型文本文件。它没有过期日期,所以浏览会话结束时(通常是关闭浏览器时)浏览器就会删除它。网站用会话 Cookie 在不同页面之间记住一些信息,例如你已登录,或者购物车里有哪些商品。
会话 Cookie 也被称为临时 Cookie(transient cookie 或 temporary cookie)、内存 Cookie(in-memory cookie)或非持久性 Cookie(non-persistent cookie)。
| 属性 | 会话 Cookie |
|---|---|
| 有效期 | 直到浏览器会话结束 |
| 过期日期 | 无:未设置 Expires 或 Max-Age 属性 |
| 存储位置 | 浏览器内存中,不会作为长期 Cookie 写入磁盘 |
| 常见内容 | 一个随机会话 ID,指向保存在服务器上的数据 |
| 常见用途 | 登录、购物车、多步骤表单、安全令牌、负载均衡 |
| 来源 | 通常是第一方 Cookie,由你正在访问的网站设置 |
| GDPR 下是否需要同意 | 严格必要时不需要;用于分析或广告时需要 |
HTTP 是无状态的:浏览器每次请求页面时,服务器都把它当作一个全新的、互不相关的请求。会话 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 | 持久性 Cookie | |
|---|---|---|
| 过期时间 | 浏览器会话结束时 | 到指定日期,或经过指定秒数后 |
| 设置方式 | 不设置 Expires 或 Max-Age | 设置 Expires 或 Max-Age 属性 |
| 存储 | 浏览器内存 | 写入磁盘,关闭浏览器后仍然保留 |
| 关闭浏览器后是否保留 | 否(除非开启了会话恢复) | 是 |
| 常见用途 | 登录状态、购物车、安全、负载均衡 | “记住我”、已保存的偏好设置、分析、广告 |
| 跨访问跟踪 | 否 | 是 |
| GDPR 下是否需要同意 | 作为严格必要 Cookie 通常可豁免 | 通常需要,除非属于严格必要 |
很多网站两者都会使用。例如,登录系统可能用会话 Cookie 处理本次访问,再用一个持久性的“记住我” Cookie 让你下周自动重新登录。
不一定。如果浏览器设置为恢复上次的会话,例如 Chrome 的“继续浏览上次打开的网页”或 Firefox 的“打开先前的窗口和标签页”,重启后可能仍会保留会话 Cookie。有些移动浏览器因为应用从未被完全关闭,几乎不会结束会话。因此,服务器也应在一段时间无操作后自行让会话过期。
这几个术语经常被混淆:
更多内容请参阅我们的 Cookie 与本地存储指南。
大多数会话 Cookie 是第一方 Cookie:它们由地址栏中的域名设置,用于让该网站正常运行。嵌入在页面中的第三方服务,例如支付组件、聊天工具或视频播放器,也可以在自己的域名下设置会话 Cookie。浏览器对第三方 Cookie 的限制越来越多,因此这类 Cookie 不如第一方 Cookie 可靠。
会话 Cookie 不包含病毒,也不能运行代码。它们通常只保存一个随机 ID。风险在于,任何窃取到有效会话 ID 的人都可以在会话结束前冒充该用户。这被称为会话劫持。
使用以下属性和做法来保护会话 Cookie:
这取决于 Cookie 的用途,而不是它的有效期长短。根据《电子隐私指令》(ePrivacy Directive)第 5(3) 条,存储或读取 Cookie 需要事先征得同意,除非该 Cookie 对用户所请求的服务是严格必要的。GDPR 规定了这种同意的标准,并适用于 Cookie 收集的任何个人数据。
第 29 条工作组关于 Cookie 同意豁免的第 04/2012 号意见列出了无需征得同意的典型 Cookie。其中很多是会话 Cookie:
如果会话 Cookie 用于分析、广告、社交媒体跟踪或任何非严格必要的用途,仍然需要征得同意。有效期短并不能让跟踪 Cookie 获得豁免。
即使不需要征得同意,你仍然必须告知用户你使用了哪些 Cookie,通常通过 Cookie 政策或 Cookie 声明来说明。英国 PECR、美国加州 CCPA/CPRA 以及其他隐私法律对 Cookie 披露也有类似规定。
如需一次性检查你网站上的所有 Cookie,包括哪些是会话 Cookie,可以使用 UniConsent Cookie 检查工具免费扫描。
UniConsent 是一个获得 Google 认证并在 IAB Europe 注册的同意管理平台(CMP)。它帮助你将会话 Cookie 与网站上的其他所有 Cookie 一起管理:
会话 Cookie 会一直保留到浏览器会话结束,通常是在你关闭浏览器时。如果浏览器在重启时恢复会话,它可能保留更久。它所指向的服务器端会话往往更早超时,通常是在无操作 15 到 30 分钟后。
存储在浏览器内存中。它们不会作为长期 Cookie 保存到磁盘上,不过开启会话恢复的浏览器可能会临时保存它们,以便重新打开你的标签页。
单独一个会话 Cookie 无法在多次访问之间跟踪你,因为它会在会话结束时被删除。但在一次访问中,它可以把你浏览的各个页面关联起来,这也是为什么用于分析或广告的会话 Cookie 在 GDPR 下仍需征得同意。
可能属于。GDPR 将在线标识符(例如与已登录用户关联的会话 ID)视为个人数据,前提是它们可用于识别某个人。
不建议这样做。屏蔽会话 Cookie 会导致大多数网站的登录、购物车和结账功能无法使用。如果想减少跟踪,更好的做法是屏蔽第三方 Cookie,并在同意横幅中拒绝非必要 Cookie。
会话 ID 是在服务器上标识你的会话的随机值。会话 Cookie 是在浏览器中存储这个 ID 并随每次请求发回的最常见方式。
开始使您的网站和应用符合欧盟 GDPR、美国 CPRA、加拿大 PIPEDA 等法规
注册