Cookie
字数 935 2025-11-13 00:29:57

Cookie

  1. 基本概念
    Cookie是网站为了记录用户状态而存储在用户浏览器中的小型文本数据。当用户访问网站时,服务器可以通过HTTP响应头向浏览器发送Cookie,浏览器会将其保存,并在后续请求中自动将Cookie发回服务器,从而实现状态保持(如登录状态、个性化设置)。

  2. 工作原理

    • 生成与发送:服务器通过HTTP响应头的Set-Cookie字段将Cookie发送给浏览器。例如:
      Set-Cookie: session_id=abc123; expires=Mon, 01-Jan-2024 12:00:00 GMT; path=/  
      
    • 存储与携带:浏览器根据规则(域名、路径、有效期)保存Cookie,并在后续同域请求中通过Cookie请求头自动附加数据:
      Cookie: session_id=abc123  
      
    • 服务器识别:服务器解析请求中的Cookie,恢复用户上下文(如用户身份、购物车内容)。
  3. 关键属性

    • 域名(Domain):指定Cookie有效的域名(默认为当前域名)。
    • 路径(Path):限制Cookie仅对特定路径可见。
    • 过期时间(Expires/Max-Age):设置Cookie失效时间(会话Cookie在浏览器关闭后删除)。
    • 安全标志(Secure):仅通过HTTPS传输。
    • HttpOnly:禁止JavaScript访问,防范XSS攻击。
  4. 分类与用途

    • 会话Cookie:临时保存浏览会话信息(如登录态),关闭浏览器后失效。
    • 持久Cookie:通过设置过期时间长期存储(如语言偏好)。
    • 第三方Cookie由跨域资源(如广告)设置,用于追踪用户行为,近年被浏览器限制。
  5. 安全与隐私问题

    • 跨站请求伪造(CSRF):攻击者利用用户已登录状态伪造请求,可通过验证Referer或使用Token防御。
    • 信息泄露:敏感数据不应存于Cookie,需配合服务端会话机制。
    • 隐私争议:第三方Cookie被用于跨站追踪,主流浏览器已逐步禁用。
  6. 技术演进与替代方案

    • SameSite属性:限制跨站请求携带Cookie,值包括Strict(完全禁止)、Lax(部分允许)、None(允许)。
    • Web StoragelocalStoragesessionStorage提供更大存储空间,但不会自动随请求发送。
    • 服务端会话:将会话数据存于服务器,仅通过Cookie传递会话ID(如PHP的$_SESSION)。
Cookie 基本概念 Cookie是网站为了记录用户状态而存储在用户浏览器中的小型文本数据。当用户访问网站时,服务器可以通过HTTP响应头向浏览器发送Cookie,浏览器会将其保存,并在后续请求中自动将Cookie发回服务器,从而实现状态保持(如登录状态、个性化设置)。 工作原理 生成与发送 :服务器通过HTTP响应头的 Set-Cookie 字段将Cookie发送给浏览器。例如: 存储与携带 :浏览器根据规则(域名、路径、有效期)保存Cookie,并在后续同域请求中通过 Cookie 请求头自动附加数据: 服务器识别 :服务器解析请求中的Cookie,恢复用户上下文(如用户身份、购物车内容)。 关键属性 域名(Domain) :指定Cookie有效的域名(默认为当前域名)。 路径(Path) :限制Cookie仅对特定路径可见。 过期时间(Expires/Max-Age) :设置Cookie失效时间(会话Cookie在浏览器关闭后删除)。 安全标志(Secure) :仅通过HTTPS传输。 HttpOnly :禁止JavaScript访问,防范XSS攻击。 分类与用途 会话Cookie :临时保存浏览会话信息(如登录态),关闭浏览器后失效。 持久Cookie :通过设置过期时间长期存储(如语言偏好)。 第三方Cookie 由跨域资源(如广告)设置,用于追踪用户行为,近年被浏览器限制。 安全与隐私问题 跨站请求伪造(CSRF) :攻击者利用用户已登录状态伪造请求,可通过验证 Referer 或使用Token防御。 信息泄露 :敏感数据不应存于Cookie,需配合服务端会话机制。 隐私争议 :第三方Cookie被用于跨站追踪,主流浏览器已逐步禁用。 技术演进与替代方案 SameSite属性 :限制跨站请求携带Cookie,值包括 Strict (完全禁止)、 Lax (部分允许)、 None (允许)。 Web Storage : localStorage 与 sessionStorage 提供更大存储空间,但不会自动随请求发送。 服务端会话 :将会话数据存于服务器,仅通过Cookie传递会话ID(如PHP的 $_SESSION )。