深入理解与使用 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

在 Mac Mini M4 上本地跑大模型(Ollama + Llama + ComfyUI + Stable Diffusion | Flux)

在 Mac Mini M4 上本地跑大模型(Ollama + Llama + ComfyUI + Stable Diffusion | Flux)

Mac Mini M4 配备了苹果自家研发的 M1/M2/M4 芯片,具有强大的处理能力,能够支持本地跑一些大模型,尤其是在使用如 Ollama、Llama、ComfyUI 和 Stable Diffusion 这类 AI 相关工具时,性能表现非常好。本教程将指导你如何在 Mac Mini M4 上本地部署并运行这些大模型,涵盖从环境搭建到使用的全流程。 一、准备工作 1. 确保系统更新 确保你的 macOS 版本已更新到最新的版本(例如 macOS 13.0 以上),这将确保兼容性和性能。 安装 Homebrew(macOS 包管理工具) Homebrew 是 macOS 上非常流行的包管理工具,它帮助你方便地安装各种软件。在终端中输入以下命令来安装

AI绘画R18提示词工程实践:从原理到安全合规实现

快速体验 在开始今天关于 AI绘画R18提示词工程实践:从原理到安全合规实现 的探讨之前,我想先分享一个最近让我觉得很有意思的全栈技术挑战。 我们常说 AI 是未来,但作为开发者,如何将大模型(LLM)真正落地为一个低延迟、可交互的实时系统,而不仅仅是调个 API? 这里有一个非常硬核的动手实验:基于火山引擎豆包大模型,从零搭建一个实时语音通话应用。它不是简单的问答,而是需要你亲手打通 ASR(语音识别)→ LLM(大脑思考)→ TTS(语音合成)的完整 WebSocket 链路。对于想要掌握 AI 原生应用架构的同学来说,这是个绝佳的练手项目。 从0到1构建生产级别应用,脱离Demo,点击打开 从0打造个人豆包实时通话AI动手实验 AI绘画R18提示词工程实践:从原理到安全合规实现 背景痛点:需求与限制的平衡 在游戏角色设计、影视概念艺术等领域,R18内容创作存在明确的市场需求。但主流AI绘画平台对成人内容的生成往往采取严格限制,导致开发者面临两难: * 商业项目需要符合角色设定的视觉表现,但直接使用"

5分钟部署Z-Image-Turbo,阿里开源文生图模型让AI绘画极速上手

5分钟部署Z-Image-Turbo,阿里开源文生图模型让AI绘画极速上手 你有没有过这样的体验:灵光一闪想生成一张“宋代茶室配青瓷茶具与窗外竹影”的图,结果等了23秒,画面出来却漏了竹影、茶具歪斜、连“宋”字都写成了错别字?更别说还要折腾CUDA版本、下载几个GB的模型权重、改八处配置文件……AI绘画不该是这样。 Z-Image-Turbo来了——它不讲参数玄学,不堆硬件门槛,就做一件事:让你在5分钟内,用16GB显存的RTX 4080,输入一句中文,0.8秒后看到一张照片级真实感的高清图,文字清晰、构图准确、风格稳定。 这不是Demo视频里的剪辑效果,而是你本地终端里敲几行命令就能跑起来的真实能力。它来自阿里巴巴通义实验室,是Z-Image系列中专为“开箱即用”而生的蒸馏版本,也是目前中文用户能接触到的、最省心、最快、最靠谱的开源文生图方案。 1. 为什么Z-Image-Turbo值得你立刻试试? 市面上的文生图工具不少,但真正落到日常使用,往往卡在三个地方:中文不认、生成太慢、部署太烦。Z-Image-Turbo不是在某一点上微调,而是系统性地把这三道坎全铲平了。

AIGC产品经理面试题汇总|从 0 到 1 做 AIGC 产品,核心能力与面试考点全拆解

2026年,生成式AI已经彻底走完了从技术爆发到产业落地的关键周期。当通用大模型的格局逐步固化,垂直行业的AIGC应用遍地开花,AI产品经理早已从互联网行业的“加分岗”,变成了科技企业、传统产业数字化转型的核心刚需岗。 但市场始终存在严重的人才供需错配:传统产品经理懂用户、懂流程,却摸不透AIGC的技术边界与产品逻辑;技术背景的从业者懂模型、懂算法,却无法把技术能力转化为可落地的用户价值与商业闭环。这也导致了AIGC产品岗的面试呈现出极强的两极分化——背概念的候选人一抓一大把,能真正讲清“从0到1做一款AIGC产品”的人寥寥无几。 这篇文章,我们不止于罗列面试题,更要拆解AIGC产品经理的核心能力模型,还原从0到1操盘AIGC产品的全链路流程,深挖大厂高频面试题背后的考察逻辑,同时结合产业趋势给出前瞻性判断。无论是想入行AIGC领域的产品新人,还是想突破职业瓶颈的资深产品人,都能从中找到可复用的方法论与可落地的行动指南。 第一章 认知破界:AIGC产品经理的核心定位与底层认知 这是所有面试的开篇考点,也是做AIGC产品的底层逻辑。面试官问基础认知题,从来不是想听你背大模型的定