前端存储技术详解 —— 以 Cookie 为例(结合 nodemon 实践)

0 阅读5分钟

前沿

在现代 Web 开发中,前端存储技术扮演着至关重要的角色。它不仅提升了用户体验,还为数据的持久化、状态管理和个性化服务提供了基础。本文将Cookie的实践为例,系统梳理前端存储的核心知识,重点讲解 Cookie 的原理、用法及其在实际开发中的应用。同时,结合后端开发常用工具 nodemon,介绍如何高效开发和调试 Node.js 服务端代码。

一、前端存储技术概览

前端存储主要包括以下几种方式:

  1. Cookie
    最早的前端存储方案,主要用于会话管理、个性化设置和跟踪用户行为。
  2. LocalStorage
    HTML5 标准引入,支持更大容量的数据存储,生命周期为永久。
  3. SessionStorage
    与 LocalStorage 类似,但生命周期仅限于当前会话。
  4. IndexedDB / WebSQL
    面向更复杂数据结构和大数据量的本地数据库解决方案。

本文聚焦于 Cookie 的原理与实践。


二、Cookie 的基本原理

1. 什么是 Cookie?

Cookie 是由服务器发送到用户浏览器并保存在本地的一小段文本信息。每次浏览器向同一服务器发起请求时,会自动携带相应的 Cookie 数据。Cookie 主要用于:

  • 用户身份认证(如登录态维持)
  • 用户偏好设置(如主题、语言)
  • 跟踪与分析用户行为

如掘金页面的cookie:

image.png

2. Cookie 的结构

一个典型的 Cookie 包含以下字段:

  • name:键名
  • value:键值
  • expires / max-age:过期时间
  • path:作用路径
  • domain:作用域域名
  • secure:仅在 HTTPS 下传输
  • httpOnly:仅服务器可访问,前端 JS 不能访问

3. Cookie 的特点

  • 容量小:单个 Cookie 最大 4KB,每个域名下最多 20 个 Cookie。
  • 自动携带:同源请求自动携带 Cookie。
  • 安全性有限:明文传输,易被劫持,敏感信息需谨慎存储。

三、Cookie 的前端操作

1. 设置 Cookie

在前端,可以通过 document.cookie 设置 Cookie。例如:

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

2. 读取 Cookie

读取 Cookie 时,document.cookie 返回所有 Cookie 的字符串:

console.log(document.cookie); // "username=Tom; theme=dark"

通常需要自行解析字符串,获取指定键值。

3. 删除 Cookie

删除 Cookie 的方式是将其过期时间设置为过去的时间:

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

四、实践:Cookie Demo 解析

一个完整的 Cookie 演示项目,结构如下:

  • app.js:后端服务逻辑(如有)
  • public/index.html:前端页面
  • public/script.js:前端 JS 操作 Cookie 的核心代码
  • server.js:Node.js 服务端代码(如有)

1. 前端页面(index.html)

页面通常包含表单或按钮,允许用户设置、读取和删除 Cookie。通过与 script.js 交互,实现 Cookie 的动态操作。

2. 前端脚本(script.js)

核心逻辑包括:

  • 设置 Cookie(带过期时间、路径等参数)
  • 读取 Cookie(解析字符串,获取指定键值)
  • 删除 Cookie(设置过期时间为过去)

示例代码片段:

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

// 读取 Cookie
function getCookie(name) {
  const nameEQ = name + "=";
  const ca = document.cookie.split(';');
  for(let i=0;i < ca.length;i++) {
    let c = ca[i];
    while (c.charAt(0)==' ') c = c.substring(1,c.length);
    if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
  }
  return null;
}

// 删除 Cookie
function eraseCookie(name) {   
  document.cookie = name+'=; Max-Age=-99999999;';  
}

3. 服务端(server.js)

如果涉及后端,服务端可通过响应头 Set-Cookie 设置 Cookie,实现登录态等功能。


五、nodemon:高效开发 Node.js 服务端的利器

在开发 Node.js 服务端(如 cookie-demo/server.js)时,频繁修改代码后需要手动重启服务,极大影响开发效率。nodemon 是一个能够自动监控代码变动并重启 Node.js 应用的开发工具。

1. nodemon 简介

  • 自动重启:监听文件变化,自动重启服务端进程。
  • 开发专用:仅用于开发环境,生产环境请用 pm2 等进程管理工具。
  • 易于集成:可通过命令行或 npm script 启动。

2. 安装 nodemon

全局安装:

npm install -g nodemon

或作为项目开发依赖安装:

npm install --save-dev nodemon

3. 使用 nodemon 启动服务

假设你的服务端入口文件为 server.js,可通过以下命令启动:

nodemon server.js

每当你修改 server.js 或相关文件并保存时,nodemon 会自动重启服务,极大提升开发效率。

4. 在 package.json 中配置 nodemon

你可以在 package.jsonscripts 字段中添加:

"scripts": {
  "dev": "nodemon server.js"
}

然后通过命令行运行:

npm run dev

六、Cookie 的实际应用场景

  1. 用户登录态管理
    通过设置带有 httpOnlysecure 属性的 Cookie,存储 Session ID,保障安全。
  2. 个性化设置
    记录用户的主题、语言等偏好,下次访问自动应用。比如我的掘金页面Cookie包含了其中带有token、session、id、uid、sid 等字样的,基本都和用户身份、会话相关。 带有 utm 的,和流量来源统计相关。其他如 locale、is_staff_user 等则是用户偏好或权限标记。

这些 cookie 主要用于:用户身份识别、会话保持、流量统计、来源追踪、安全防护(如CSRF、反爬虫)等

  1. 广告与行为跟踪
    第三方 Cookie 可用于广告投放和用户行为分析(但已被主流浏览器逐步限制)。

七、Cookie 的安全与限制

  • XSS 攻击:Cookie 易被脚本窃取,敏感信息应加 httpOnly
  • CSRF 攻击:Cookie 自动携带,需配合 CSRF Token 防护。
  • 隐私政策:需遵守相关法律法规(如 GDPR)。

八、总结

Cookie 作为前端最早的存储方案,至今仍在 Web 开发中发挥着重要作用。通过本项目的实践,我们不仅掌握了 Cookie 的基本操作,还理解了其在实际开发中的应用场景与安全注意事项。同时,借助 nodemon 工具,Node.js 服务端开发变得更加高效和便捷。未来,随着浏览器安全策略的不断升级,合理选择和使用前端存储技术,将成为每一位开发者的必备技能。