深入理解与使用 Cookie:Web 开发中的关键机制

深入理解与使用 Cookie:Web 开发中的关键机制
在这里插入图片描述
🤍 前端开发工程师、技术日更博主、已过CET6
🍨 阿珊和她的猫_ZEEKLOG博客专家、23年度博客之星前端领域TOP1
🕠 牛客高级专题作者、打造专栏《前端面试必备》《2024面试高频手撕题》《前端求职突破计划》
🍚 蓝桥云课签约作者、上架课程《Vue.js 和 Egg.js 开发企业级健康管理项目》《带你从入门到实战全面掌握 uni-app》

文章目录

在 Web 开发中,Cookie 是一种用于在客户端存储少量数据的技术,广泛应用于用户会话管理、偏好设置、跟踪用户行为等场景。本文将详细介绍如何使用 Cookie,包括其基本概念、设置与读取方法、安全性问题以及最佳实践。

一、Cookie 的基本概念

(一)什么是 Cookie?

Cookie 是存储在用户浏览器中的小段文本数据,用于跟踪用户的状态和偏好设置。当用户访问网站时,服务器可以设置 Cookie,并将其发送到用户的浏览器。浏览器会将这些 Cookie 保存在本地,并在后续请求中自动将它们发送回服务器。

(二)Cookie 的组成

Cookie 由以下几部分组成:

  1. 名称(Name):Cookie 的名称,用于标识 Cookie。
  2. 值(Value):存储在 Cookie 中的数据。
  3. 过期时间(Expires/Max-Age):Cookie 的有效期。如果未设置,Cookie 将在浏览器关闭时失效。
  4. 路径(Path):Cookie 适用的路径。默认为设置 Cookie 的路径。
  5. 域(Domain):Cookie 适用的域名。默认为设置 Cookie 的域名。
  6. 安全标志(Secure):如果设置为 Secure,Cookie 只会通过 HTTPS 协议发送。
  7. HttpOnly 标志:如果设置为 HttpOnly,Cookie 无法通过 JavaScript 访问,从而减少 XSS 攻击的风险。
  8. SameSite 属性:限制 Cookie 的跨站发送,减少 CSRF 攻击的风险。

在服务器端,可以通过 HTTP 响应头设置 Cookie。例如,在 PHP 中:

<?phpsetcookie("username","John Doe",time()+3600,"/","example.com",true,true);?>

在客户端,可以通过 JavaScript 设置 Cookie:

document.cookie ="username=John Doe; expires=Thu, 18 Dec 2023 12:00:00 UTC; path=/; Secure; HttpOnly";

在服务器端,可以通过 HTTP 请求头读取 Cookie。例如,在 PHP 中:

<?php$username=$_COOKIE['username'];echo$username;?>

在客户端,可以通过 JavaScript 读取 Cookie:

let x = document.cookie; console.log(x);

删除 Cookie 的方法是设置一个过去的日期,使 Cookie 立即失效。例如:

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

三、Cookie 的安全性问题

(一)XSS 攻击

Cookie 存储在客户端,容易受到 XSS(跨站脚本)攻击。攻击者可以通过注入恶意脚本读取或篡改 Cookie 数据。为防止这种情况,应设置 HttpOnly 标志,防止 JavaScript 访问 Cookie。

(二)CSRF 攻击

CSRF(跨站请求伪造)攻击是指攻击者诱导用户在当前已登录的网站上执行非预期的操作。Cookie 通常用于存储会话标识符,因此容易成为 CSRF 攻击的目标。为防止这种情况,应设置 SecureSameSite 属性,限制 Cookie 的发送范围。

(三)数据泄露

Cookie 数据存储在客户端,如果通过不安全的网络传输,可能会被中间人攻击者截获。为防止这种情况,应设置 Secure 属性,确保 Cookie 只通过 HTTPS 协议发送。

四、Cookie 的最佳实践

Cookie 的大小通常限制在 4KB 左右,因此不适合存储大量数据。应尽量减少 Cookie 的大小,避免影响页面加载速度。

(二)使用 HttpOnly 属性

设置 HttpOnly 属性可以防止 JavaScript 访问 Cookie,从而减少 XSS 攻击的风险。例如:

document.cookie ="username=John Doe; HttpOnly";

(三)使用 Secure 属性

设置 Secure 属性可以确保 Cookie 只通过 HTTPS 协议发送,防止数据泄露。例如:

document.cookie ="username=John Doe; Secure";

(四)使用 SameSite 属性

设置 SameSite 属性可以限制 Cookie 的跨站发送,减少 CSRF 攻击的风险。例如:

document.cookie ="username=John Doe; SameSite=Strict";

(五)合理设置过期时间

Cookie 的过期时间应根据实际需求合理设置。如果 Cookie 存储的是敏感信息,应设置较短的过期时间,避免数据长期暴露在客户端。

(六)避免存储敏感信息

Cookie 存储在客户端,容易受到攻击。因此,应避免在 Cookie 中存储敏感信息,如密码、用户身份信息等。如果需要存储会话信息,应使用服务器端的 Session 机制,并在 Cookie 中存储会话标识符。

五、实际案例分析

(一)案例背景

假设我们有一个电商网站,需要实现用户登录功能。用户登录后,网站需要记住用户的登录状态,并在用户再次访问时自动登录。

(二)解决方案

  1. 设置会话标识符:在用户登录成功后,服务器生成一个唯一的会话标识符(Session ID),并将其存储在 Cookie 中。
<?phpsession_start();$_SESSION['username']='John Doe';setcookie("session_id",session_id(),time()+3600,"/","example.com",true,true);?>
  1. 读取会话标识符:在用户再次访问网站时,服务器通过 Cookie 中的会话标识符查找对应的会话数据。
<?phpsession_start();if(isset($_COOKIE['session_id'])){session_id($_COOKIE['session_id']);session_start();$username=$_SESSION['username'];echo"Welcome back, ".$username;}else{echo"Please log in.";}?>
  1. 设置安全性属性:为确保 Cookie 的安全性,设置 SecureHttpOnlySameSite 属性。
<?phpsetcookie("session_id",session_id(),time()+3600,"/","example.com",true,true);?>
  1. 删除 Cookie:用户登出时,删除 Cookie 中的会话标识符。
<?phpsetcookie("session_id","",time()-3600,"/","example.com",true,true);session_destroy();?>

(三)优化效果

通过上述解决方案,用户登录状态得以安全、高效地管理。Cookie 的安全性属性有效防止了 XSS 和 CSRF 攻击,确保了用户数据的安全性。

六、总结

Cookie 是 Web 开发中一种重要的用户状态管理机制,广泛应用于用户会话管理、偏好设置和用户行为跟踪等场景。通过合理设置 Cookie 的属性,可以有效提升其安全性,减少 XSS 和 CSRF 攻击的风险。在实际开发中,应遵循最佳实践,合理使用 Cookie,确保应用的安全性和性能。

希望本文能帮助你更好地理解 Cookie 的使用方法和最佳实践,让你在 Web 开发中更加得心应手。

Read more

GLM-4.6V-Flash-WEB Web界面使用指南,拖图就出结果

GLM-4.6V-Flash-WEB Web界面使用指南,拖图就出结果 你不需要配置环境、不用写一行推理代码、甚至不用打开终端——只要把一张截图拖进浏览器窗口,几秒钟后,它就能告诉你图里写了什么、画了什么、哪里有问题。这不是未来预告,而是你现在就能在本地跑起来的真实体验。 GLM-4.6V-Flash-WEB 是智谱AI最新开源的轻量级视觉语言模型,专为Web端实时交互而生。它不像某些“实验室模型”那样只存在于论文和Benchmark表格里,而是真正做到了:部署快、启动快、响应快、上手更快。一块RTX 3090,一个浏览器,一次拖拽,结果即刻呈现。 本文不讲训练原理,不列参数表格,不堆技术术语。我们只聚焦一件事:怎么用好它的Web界面?从零开始,到稳定产出,每一步都清晰可操作。 1. 为什么说“拖图就出结果”不是宣传话术? 很多多模态模型标榜“支持图文理解”,但实际用起来才发现:要装依赖、改路径、调精度、修CUDA版本、

前端防范 XSS(跨站脚本攻击)

目录 一、防范措施 1.layui util  核心转义的特殊字符 示例 2.js-xss.js库 安装 1. Node.js 环境(npm/yarn) 2. 浏览器环境 核心 API 基础使用 1. 基础过滤(默认规则) 2. 自定义过滤规则 (1)允许特定标签 (2)允许特定属性 (3)自定义标签处理 (4)自定义属性处理 (5)转义特定字符 常见场景示例 1. 过滤用户输入的评论内容 2. 允许特定富文本标签(如富文本编辑器内容) 注意事项 更多配置 XSS(跨站脚本攻击)是一种常见的网络攻击手段,它允许攻击者将恶意脚本注入到其他用户的浏览器中。

详细教程:如何从前端查看调用接口、传参及返回结果(附带图片案例)

详细教程:如何从前端查看调用接口、传参及返回结果(附带图片案例)

目录 1. 打开浏览器开发者工具 2. 使用 Network 面板 3. 查看具体的API请求 a. Headers b. Payload c. Response d. Preview e. Timing 4. 实际操作步骤 5. 常见问题及解决方法 a. 无法看到API请求 b. 请求失败 c. 跨域问题(CORS) 作为一名后端工程师,理解前端如何调用接口、传递参数以及接收返回值是非常重要的。下面将详细介绍如何通过浏览器开发者工具(F12)查看和分析这些信息,并附带图片案例帮助你更好地理解。 1. 打开浏览器开发者工具 按下 F12 或右键点击页面选择“检查”可以打开浏览器的开发者工具。常用的浏览器如Chrome、Firefox等都内置了开发者工具。下面是我选择我的一篇文章,打开开发者工具进行演示。 2. 使用

Cursor+Codex隐藏技巧:用截图秒修前端Bug的保姆级教程(React/Chakra UI案例)

Cursor+Codex隐藏技巧:用截图秒修前端Bug的保姆级教程(React/Chakra UI案例) 前端开发中最令人头疼的莫过于那些难以定位的UI问题——元素错位、样式冲突、响应式失效...传统调试方式往往需要反复修改代码、刷新页面、检查元素。现在,通过Cursor编辑器集成的Codex功能,你可以直接用截图交互快速定位和修复这些问题。本文将带你从零开始,掌握这套革命性的调试工作流。 1. 环境准备与基础配置 在开始之前,确保你已经具备以下环境: * Cursor编辑器最新版(v2.5+) * Node.js 18.x及以上版本 * React 18项目(本文以Chakra UI 2.x为例) 首先在Cursor中安装Codex插件: 1. 点击左侧扩展图标 2. 搜索"Codex"并安装 3. 登录你的OpenAI账户(需要ChatGPT Plus订阅) 关键配置项: // 在项目根目录创建.