跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
HTML / CSSNode.js大前端java

Cookie 与 Session:Web 用户状态管理机制解析

HTTP Cookie 和 Session 的定义、工作原理及区别。Cookie 存储在客户端,存在安全风险;Session 存储在服务器端,相对更安全但仍有风险。两者通常结合使用以管理 Web 用户状态,需注意安全配置如 HttpOnly 和 Secure。

利刃发布于 2026/4/6更新于 2026/5/2328 浏览
Cookie 与 Session:Web 用户状态管理机制解析

Cookie 与 Session:Web 用户状态管理机制解析

Cookie 基础

定义

HTTP Cookie(也称为 Web Cookie、浏览器 Cookie 或简称 Cookie)是服务器发送到用户浏览器并保存在浏览器上的一小块数据。它会在浏览器之后向同一服务器再次发起请求时被携带并发送到服务器上。通常,它用于告知服务端两个请求是否来自同一浏览器,如保持用户的登录状态、记录用户偏好等。

工作原理

  • 当用户第一次访问网站时,服务器会在响应的 HTTP 头中设置 Set-Cookie 字段,用于发送 Cookie 到用户的浏览器。
  • 浏览器在接收到 Cookie 后,会将其保存在本地(通常是按照域名进行存储)。
  • 在之后的请求中,浏览器会自动在 HTTP 请求头中携带 Cookie 字段,将之前保存的 Cookie 信息发送给服务器。

有了 Cookie 的存在,我们不用每次登录都要输入自己的账号密码,网站能自动识别用户,因为将用户的数据存储在了 Cookie 当中。还可以标识用户状态,对用户的登录状态进行保持,方便随时验证用户身份。

分类

  • 会话 Cookie(Session Cookie):存储在内存当中,在浏览器关闭时失效。
  • 持久 Cookie(Persistent Cookie):存储在文件当中,带有明确的过期日期或持续时间,可以跨多个浏览器会话存在。

如果 Cookie 是一个持久性的 Cookie,那么它其实就是浏览器相关的特定目录下的一个文件。但直接查看这些文件可能会看到乱码或无法读取的内容,因为 Cookie 文件通常以二进制或 SQLite 格式存储。一般我们直接在浏览器对应的选项中直接查看即可。

安全性:由于 Cookie 是存储在客户端的,因此存在被篡改或窃取的风险!

用途:

  • 用户认证和会话管理 (最重要)
  • 跟踪用户行为
  • 缓存用户偏好等

基本格式

HTTP 存在一个报头选项:Set-Cookie,可以用来给浏览器设置 Cookie 值。在 HTTP 响应头中添加,客户端(如浏览器)获取并自行设置并保存 Cookie。

Set-Cookie: = 其中 是 Cookie 的名称, 是 Cookie 的值。

完整的 Set-Cookie 示例:

Set-Cookie: username=peter; expires=Thu, 18 Dec 2024 12:00:00 UTC; path=/; domain=.example.com; secure; HttpOnly

属性说明:

  • name=value:指定 Cookie 的名称和值。这是必需的。
  • expires=date:指定 Cookie 的过期时间。如果未设置,Cookie 默认在浏览器关闭时过期。
  • domain=domain:指定 Cookie 的有效域。控制哪些域可以访问该 Cookie。
  • path=path:指定 Cookie 的有效路径。控制哪些路径下的页面可以访问该 Cookie。
  • secure:如果设置了该选项,Cookie 只能通过 HTTPS 协议传输,不能通过 HTTP 协议发送,增加安全性。
  • httponly:如果设置了该选项,Cookie 将无法通过 JavaScript 脚本访问,有助于防止跨站脚本攻击(XSS)。

注意事项:

  • 每个 Cookie 属性都以分号(;)和空格( )分隔。
  • 名称和值之间使用等号(=)分隔。
  • 如果 Cookie 的名称或值包含特殊字符(如空格、分号、逗号等),则需要进行 URL 编码。

生命周期

  • 如果设置了 expires 属性,则 Cookie 将在指定的日期/时间后过期。
  • 如果没有设置 expires 属性,则 Cookie 默认为会话 Cookie,即当浏览器关闭时过期。

单独使用 Cookie 的问题

  • 我们写入的是测试数据,如果写入的是用户的私密数据呢?比如用户名密码、浏览痕迹等。
  • 本质问题在于这些用户私密数据在浏览器 (用户端) 保存,非常容易被人盗取,更重要的是,除了被盗取,还有就是用户私密数据也就泄漏了。

非常的不安全!这就需要 Session 出马了。

Session 基础

定义

HTTP Session 是服务器用来跟踪用户与服务器交互期间用户状态的机制。由于 HTTP 协议是无状态的(每个请求都是独立的),因此服务器需要通过 Session 来记住用户的信息。

  • 由服务器为每个用户会话创建的临时对象。
  • 存储了与特定用户会话相关的信息,包括用户身份验证和会话状态。

工作原理

  • 当用户首次访问网站时,服务器会为用户创建一个唯一的 Session ID,并通过 Cookie 将其发送到客户端。
  • 客户端在之后的请求中会携带这个 Session ID,服务器通过 Session ID 来识别用户,从而获取用户的会话信息。
  • 服务器通常会将 Session 信息存储在内存、数据库或缓存中。

安全性

与 Cookie 相似,由于 Session ID 是在客户端和服务器之间传递的,因此也存在被窃取的风险!但是一般虽然 Cookie 被盗取了,但是用户只泄漏了一个 Session ID,私密信息暂时没有被泄露的风险。

可以通过 HTTPS 和设置合适的 Cookie 属性(如 HttpOnly 和 Secure)来增强安全性。

超时和失效

Session 可以设置超时时间,当超过这个时间后,Session 会自动失效。服务器也可以主动使 Session 失效,例如当用户登出时。

Session 是相对安全的,Session ID 也有可能被盗取!Session 是服务器创建,服务器管理的,所以当服务器辨别到 Session ID 有被盗取的风险,只要让 Session ID 失效就可以了。

那么服务器是怎么知道这个 Client 对应的 Session 是一个非法的呢?需要跟业务结合!例如某些社交应用在异地登录的时候,服务端会识别到,需要我们重新扫码验证才能异地登录,这里的异地登录就是可能潜在被盗用的风险。

总结

HTTP Cookie 和 Session 都是用于在 Web 应用中跟踪用户状态的机制。Cookie 是存储在客户端的,而 Session 是存储在服务器端的。它们各有优缺点,通常在实际应用中会结合使用,以达到最佳的用户体验和安全性。

但是 Session 和 Cookie 都不是绝对安全的!Session 只是比 Cookie 相对安全!所以我们要认识到,在网络世界里,几乎没有东西是绝对安全的。

目录

  1. Cookie 与 Session:Web 用户状态管理机制解析
  2. Cookie 基础
  3. 定义
  4. 工作原理
  5. 分类
  6. 基本格式
  7. 生命周期
  8. 单独使用 Cookie 的问题
  9. Session 基础
  10. 定义
  11. 工作原理
  12. 安全性
  13. 超时和失效
  14. 总结
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • Linux内核源代码深度解析:从设备树到电源管理的完整技术栈
  • LLM 与图数据库、知识图谱的结合应用与实践
  • Spring Bean 作用域、生命周期与自动装配深度解析
  • AI 原生应用开发:Llama 模型核心概念与应用基础
  • Visual C++ 运行库诊断与部署完整方案
  • C++ 语言基础与进阶学习教程
  • 10 款高效降低 AIGC 生成痕迹工具评测
  • AR 滤镜触发机制:基于特定图案识别激活特效
  • Spring Boot 整合 MyBatis-Plus 实现多数据源配置
  • 人工智能:多模态大模型原理与跨模态应用实战
  • BurpSuite 专业版在 macOS 上的安装与配置
  • MySQL 内置函数与内外连接详解
  • C++ STL list 容器详解:使用与模拟实现
  • FastGithub 使用指南:优化 GitHub 访问速度
  • IT 安全核心:实时网络安全监控与 SIEM 解决方案
  • 生产环境中的 RAG 实践与常见困境分析
  • 前端大数据导出优化:解决 Chrome 内存崩溃实战方案
  • STL 到 STEP 格式转换完整解决方案指南
  • 从 GAN 到 ChatGPT:AIGC 技术演进与实战应用指南
  • Windows 下 Python 包管理工具 uv 安装与 VSCode 配置

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online