JavaScript Cookie 教程:如何安全地设置、获取和管理 Cookie

1. 介绍

在使用 JavaScript 进行网页开发时,Cookie 被广泛用作存储用户相关信息的重要机制。
例如,它们常用于保持登录会话或存储购物车数据,从而显著提升用户的便利性。

然而,对于初学者来说,“Cookie 是什么?”或“如何使用 JavaScript 操作 Cookie?”等概念可能比较难以理解。

本文将对 JavaScript Cookie 处理 进行详细阐述,从基础概念到高级用法。
通过实用的代码示例,本指南旨在为初学者和中级开发者提供帮助。

2. 什么是 Cookie?

Cookie 的基本概念

Cookie 是存储在网页浏览器中的一小段数据。
它主要用于以下目的:

  • 存储用户在网站上输入的信息(例如登录凭证)。
  • 记录访客行为,以用于营销和分析。
  • 保留配置信息(例如语言偏好或主题设置),以提升用户体验。

Cookie 的工作原理

Cookie 由 键值对 组成,存储格式如下:

name=value; expires=Wed, 31 Dec 2025 23:59:59 GMT; path=/

在此示例中,键 name 被赋予值 value,并附带了过期日期和指定的路径。

Cookie 的主要组成部分

  1. 名称和值(name=value) – Cookie 的基本信息。
  2. 过期时间(expires 或 max-age) – 指定 Cookie 的有效期限。
  3. 路径(Path) – 定义 Cookie 可访问的目录或页面。
  4. Secure 属性 – 确保 Cookie 仅在 HTTPS 连接中发送。
  5. SameSite 属性 – 有助于防止跨站请求攻击(CSRF)。

这些灵活的设置使得 Cookie 在提升用户体验的同时,也能加强安全性。

3. JavaScript 中的基础 Cookie 操作

在 JavaScript 中,Cookie 通过 document.cookie 属性进行操作。
本节将介绍基本的操作方法。

设置 Cookie

下面是创建新 Cookie 的示例:

document.cookie = "username=John; expires=Fri, 31 Dec 2025 23:59:59 GMT; path=/";

关键点:

  • username=John:指定键和值。
  • expires:设置过期日期。如果省略,浏览器关闭时 Cookie 将被删除。
  • path=/:使 Cookie 在整个站点范围内可用。

获取 Cookie

可以通过以下方式获取所有 Cookie:

console.log(document.cookie);

示例输出:

username=John; theme=dark; lang=ja

由于多个 Cookie 之间使用分号(;)分隔,在处理单个值时需要对字符串进行拆分。

删除 Cookie

要删除 Cookie,只需将其过期日期设为过去的时间即可。

document.cookie = "username=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/";

上述代码会删除名为 username 的 Cookie。

4. Cookie 属性设置

Cookie 属性在安全性和过期控制方面起着重要作用。

设置过期时间

  1. 使用 expires 属性(基于日期)
    document.cookie = "username=John; expires=Fri, 31 Dec 2025 23:59:59 GMT; path=/";
    
  1. 使用 max-age 属性(基于秒数)
    document.cookie = "username=John; max-age=3600; path=/";
    

此配置会在一小时后自动删除 Cookie。

安全属性

  1. secure 属性(仅限 HTTPS)
    document.cookie = "username=John; secure";
    
  1. SameSite 属性(跨站请求保护)
    document.cookie = "username=John; SameSite=Strict";
    

通过正确配置这些属性,可显著提升安全性和隐私保护水平。

5. 实用代码示例

统计用户访问次数

function getCookie(name) {
  let cookies = document.cookie.split('; ');
  for (let i = 0; i < cookies.length; i++) {
    let parts = cookies[i].split('=');
    if (parts[0] === name) return parts[1];
  }
  return null;
}

function setCookie(name, value, days) {
  let expires = "";
  if (days) {
    let date = new Date();
    date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
    expires = "; expires=" + date.toUTCString();
  }
  document.cookie = name + "=" + value + expires + "; path=/";
}

let visits = getCookie("visits") ? parseInt(getCookie("visits")) : 0;
visits++;
setCookie("visits", visits, 365);
alert("Your number of visits: " + visits);

此代码将用户访问次数存储在 cookie 中,并在每次访问时更新计数。

6. 使用第三方库

虽然可以使用 JavaScript 中的 document.cookie 属性来管理 cookie,但处理字符串和设置属性往往会变得繁琐。
这通常导致代码更长,可读性降低。

为了简化 cookie 管理,使用 第三方库 是一种常见且有效的方法。
本节我们重点介绍最流行的库之一:js-cookie

1. 什么是 js-cookie 库?

js-cookie 是一个轻量级的 JavaScript 库,简化了 cookie 操作。
其主要特性包括:

  • 简洁的 API :轻松设置、获取和删除 cookie。
  • 可扩展性和灵活性 :支持安全选项和自定义配置。
  • 轻量级 :压缩后仅约 2 KB。

2. 安装 js-cookie

通过 CDN 加载

在 HTML 文件的 &lt;head&gt; 标签内添加以下代码。

<script src="https://cdn.jsdelivr.net/npm/js-cookie@3.0.1/dist/js.cookie.min.js"></script>

通过 npm 或 yarn 安装

如果在项目中管理依赖,请使用以下命令之一:

npm install js-cookie

yarn add js-cookie

3. 基本用法

设置 Cookie

Cookies.set('username', 'John', { expires: 7 }); // Valid for 7 days

获取 Cookie

let username = Cookies.get('username');
console.log(username); // Output: John

删除 Cookie

Cookies.remove('username');

4. 高级选项设置

设置过期时间和路径

Cookies.set('session', 'active', { expires: 1, path: '/' });
  • expires :1 天后过期。
  • path :使 cookie 在整个站点范围内可用。

添加 secure 属性

Cookies.set('secureData', 'secret', { secure: true });
  • secure: true :仅在 HTTPS 下发送 cookie。

指定 SameSite 属性

Cookies.set('strictCookie', 'value', { sameSite: 'Strict' });
  • sameSite: ‘Strict’ :阻止跨站请求,提升安全性。

7. 安全性与隐私考虑

在 JavaScript 中使用 cookie 时,安全措施隐私保护 极为重要。
处理不当可能导致数据泄露或未授权访问。
本节阐述安全 cookie 管理的最佳实践。

1. 安全措施

使用 HTTPS 和 Secure 属性

设置 Secure 属性,使 cookie 仅在 HTTPS 连接中发送。
这有助于防止数据被拦截或篡改。

示例:

document.cookie = "sessionID=abc123; Secure";

使用第三方库 js-cookie 时,可按如下方式配置:

Cookies.set('sessionID', 'abc123', { secure: true });

使用 HttpOnly 属性(服务器端配置)

JavaScript 无法在客户端设置 HttpOnly 属性。
但在服务器端配置该属性可帮助防止
XSS(跨站脚本) 攻击。

示例:服务器端配置(PHP)

setcookie('sessionID', 'abc123', [
    'httponly' => true,
    'secure' => true,
    'samesite' => 'Strict'
]);

使用 SameSite 属性防止 CSRF 攻击

为了防止 CSRF(跨站请求伪造) 攻击,
请配置 SameSite 属性。

示例:

document.cookie = "token=secureToken; SameSite=Strict";

2. 隐私保护

限制存储信息的类型

避免在 Cookie 中存储个人或敏感信息(例如密码)。
相反,存储匿名标识符,如会话 ID,并在服务器端进行验证。

示例:使用会话 ID

Cookies.set('sessionID', 'randomString123', { secure: true, httpOnly: true });

符合 GDPR 与隐私法规的要求

由于欧盟的 GDPR(通用数据保护条例)
以及日本的 个人信息保护法 等法规,
在使用 Cookie 时需满足以下要求:

  1. 强制用户同意:必须告知用户 Cookie 的使用目的并获取明确同意。
  2. 提供选择加入和退出的选项:用户必须能够拒绝非必要的 Cookie。

示例:Cookie 同意横幅(JavaScript)

if (!Cookies.get('cookieConsent')) {
  let consent = confirm('This site uses cookies. Do you allow cookies?');
  if (consent) {
    Cookies.set('cookieConsent', 'true', { expires: 365 });
  }
}

8. 如何在浏览器中检查 Cookie

在使用 JavaScript 设置、获取或删除 Cookie 时,
可以通过 浏览器开发者工具 验证其行为。
本节介绍在主流浏览器中检查 Cookie 的方法。

1. 在 Google Chrome 中检查 Cookie

打开开发者工具

  1. 右键单击页面并选择 “检查”“检查元素”
  2. 或者按 F12Ctrl + Shift + I(Mac 上为 Cmd + Opt + I)。

查看 Cookie 的步骤

  1. 在开发者工具中选择 “Application” 选项卡。
  2. 在左侧菜单中点击 “Storage” → “Cookies”
  3. 从列表中选择目标域名。

查看 Cookie 详细信息

所选站点的 Cookie 以表格形式显示。
每一列代表以下信息:

ColumnDescription
NameCookie name (key)
ValueStored value
DomainApplicable domain
PathApplicable path
Expires / Max-AgeExpiration date
SizeCookie size (bytes)
HttpOnlyWhether HttpOnly is enabled (not accessible via JavaScript)
SecureWhether Secure is enabled (HTTPS only)
SameSiteSameSite setting (Strict, Lax, None)

编辑和删除 Cookie

  • 编辑:双击行即可修改其值。
  • 删除:选中行后按 Delete 键,或右键选择 Delete

2. 在 Firefox 中检查 Cookie

打开开发者工具

  1. 右键单击页面并选择 “检查”
  2. 或者按 F12Ctrl + Shift + I

查看 Cookie

  1. 选择 “Storage” 选项卡。
  2. 从左侧菜单点击 “Cookies”
  3. 从显示的域名列表中选择目标站点。

编辑和删除

与 Chrome 类似,您可以直接编辑值或删除 Cookie。

3. 在 Safari(Mac 用户)中检查 Cookie

启用开发者工具

  1. 从 Safari 菜单打开 “设置”
  2. 选择 “高级” 选项卡并勾选 “在菜单栏中显示 Develop 菜单”

打开开发者工具

  1. 右键单击页面并选择 “检查元素”
  2. 或者按 Cmd + Opt + I

查看 Cookie

  1. 选择 “Storage” 选项卡。
  2. 选择 “Cookies” 以查看其内容。

4. 通过控制台检查 Cookie

也可以使用 JavaScript 控制台 检查 Cookie。

示例:显示所有 Cookie

console.log(document.cookie);

示例:获取特定 Cookie

let cookies = document.cookie.split('; ');
let username = cookies.find(row => row.startsWith('username=')).split('=')[1];
console.log(username);

也可以直接在控制台中添加或删除 Cookie。

9. 总结

在前面的章节中,我们已经介绍了 JavaScript 中的 Cookie 处理,从基本概念到高级用例。本节回顾关键要点并总结实用的最佳实践。

1. Cookie 基础及其工作原理

Cookie 是一种在网页浏览器中存储少量数据的机制。

  • 使用场景:维护登录会话、管理用户偏好以及跟踪行为。
  • 组成部分:键值对、过期设置、路径、域以及安全属性。

理解这些基础知识可以让你灵活地将 Cookie 适配到各种场景中。

2. JavaScript 中的 Cookie 操作

在 JavaScript 中,你可以通过 document.cookie 属性轻松地设置、获取和删除 Cookie。

示例:设置 Cookie

document.cookie = "username=John; expires=Fri, 31 Dec 2025 23:59:59 GMT; path=/";

示例:获取 Cookie

console.log(document.cookie);

示例:删除 Cookie

document.cookie = "username=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/";

这些示例涵盖了基础,但对于更复杂的需求,建议使用第三方库。

3. 使用第三方库

库可以显著简化 Cookie 管理,使代码更易读。

使用 js-cookie 的示例

Cookies.set('username', 'John', { expires: 7, secure: true });
let username = Cookies.get('username');
Cookies.remove('username');

优势

  • 代码简短且直观。
  • 安全属性和选项配置方便。
  • 跨浏览器兼容性良好。

4. 安全与隐私措施

Cookie 应始终配合适当的 安全设置隐私保护 使用。

关键安全实践

  1. 使用 HTTPS 并设置 Secure 属性:防止数据被拦截。
  2. 设置 SameSite 属性:防御 CSRF 攻击。
  3. 使用 HttpOnly 属性:降低 XSS 攻击风险(需服务器端配置)。

关键隐私实践

  1. 不要存储个人信息:仅存储 ID 或令牌,实际数据在服务器端管理。
  2. 遵守法规:依据 GDPR 等相关法律实现同意管理。
  3. 加密敏感数据:在存储前始终对关键信息进行加密。

5. 验证与调试 Cookie

使用开发者工具可以高效地验证和调试 Cookie 的行为。

各浏览器的工具

  • Google Chrome:功能强大且界面友好。
  • Firefox:提供高级存储管理功能。
  • Edge 与 Safari:可通过类似 Chrome 的步骤进行管理。

使用 JavaScript 控制台

console.log(document.cookie);

这使得快速测试和调试成为可能。

6. 实用最佳实践

以下是安全高效的 Cookie 管理的具体建议:

  1. 仅存储最小必要数据:避免不必要的 Cookie,将关键数据放在服务器端管理。
  2. 设置合适的过期时间:使用较短的过期时间,并删除不再使用的 Cookie。
  3. 强化安全设置:始终配置 Secure、HttpOnly 和 SameSite 属性。
  4. 获取用户同意:部署符合 GDPR 等隐私法规的同意横幅。
  5. 有效使用调试工具:定期使用浏览器开发者工具检查 Cookie。
  6. 利用第三方库:使用如 js-cookie 等库简化管理并提升可读性。

结论

本文对 JavaScript 中的 Cookie 管理进行了全面概述,涵盖了从基础使用到安全与隐私的各个方面。

关键要点

  • Cookies 工作原理的基础以及何时使用它们。
  • 使用 JavaScript 设置、获取和删除 Cookie。
  • 安全措施和法律合规的重要性。
  • 使用开发者工具和第三方库实现高效工作流。

下一步
将本指南作为参考,在实际项目中实现 Cookie 管理。
为了在不断变化的隐私法下保持安全和合规,
持续学习并定期审查最佳实践至关重要。

持续融合新技术和新知识,以构建更安全、
更友好的 Web 应用。

広告