news 2026/5/12 23:52:07

【Java EE】Cookie

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Java EE】Cookie

Cookie

  • 为什么需要 Cookie
  • 认证流程详解
    • Session 对象
    • SessionId
    • Cookie 传递
    • 过期机制
  • 安全相关配置
  • 注销处理
  • 分布式环境注意事项

为什么需要 Cookie

HTTP 是无状态协议,每次请求相互独立,服务器默认无法判断两次请求是否来自同一用户。同时,浏览器出于安全限制,不允许 JavaScript 直接读写本地文件系统。因此,浏览器引入 Cookie 机制,将少量数据存储在浏览器端,请求时自动发送给服务器,以此实现状态保持。

认证流程详解

最常见的应用场景是登录认证

服务器浏览器服务器浏览器2. 验证用户名密码3. 匹配成功,生成 sessionId + session 对象存入内存哈希表5. 浏览器保存 Cookie--- 后续请求 ---7. 通过 sessionId识别用户身份1. 发送登录请求(用户名、密码)4. Set-Cookie: sessionId=xxxx6. 请求 + Cookie: sessionId=xxxx8. 返回用户相关数据

Session 对象

  • 存储在服务器端,通常是一个键值对结构。
  • 保存当前会话的用户信息,如userIdusername、登录时间、权限等。
  • 客户端看不到 Session 的具体内容,只能拿到对应的 sessionId。

SessionId

  • 会话的唯一标识,由服务器生成。
  • 生成要求:长度足够(通常 128 位以上),使用密码学安全随机数,防止被猜测或遍历。
  • 本身不包含业务数据,只是一把"钥匙"。

Cookie 传递

  • 服务器通过响应头Set-Cookie下发 sessionId。
  • 浏览器收到后自动存储,后续相同域名的请求自动在请求头Cookie中携带。
  • 这个携带过程由浏览器自动完成,代码无需手动拼接。

过期机制

  • Cookie 可通过Max-Age(相对时间,单位秒)或Expires(绝对时间)设置有效期。
  • 过期后浏览器自动删除,下次请求不再携带,服务器视为未登录。
  • 服务器端 Session 通常也设置过期时间(如 30 分钟无操作则失效),二者共同控制会话的生命周期。

安全相关配置

属性作用建议
HttpOnly禁止 JavaScript 读取 Cookie必须设置,防 XSS 窃取
Secure仅在 HTTPS 下传输 Cookie生产环境必须设置
SameSite控制跨站请求是否携带 Cookie设为LaxStrict,防 CSRF

示例响应头:

Set-Cookie: sessionId=abc123; HttpOnly; Secure; SameSite=Lax; Path=/; Max-Age=86400

注销处理

用户退出登录时,需要同时做两件事:

  1. 服务端:销毁对应的 Session 对象,使该 sessionId 失效。
  2. 浏览器端:删除对应 Cookie(可通过设置Max-Age=0覆盖)。

只清除前端 Cookie 而不销毁 Session,攻击者仍可能利用已泄露的 sessionId 完成认证。

分布式环境注意事项

单机部署时 Session 存储在服务器内存中;多机部署时,需使用共享存储方案:

  • Redis(最常用):集中存储 Session,所有服务器共享读写。
  • 数据库:读写压力较大,一般不推荐。
  • 粘性会话(Sticky Session):负载均衡将同一用户始终路由到同一台机器,有单点故障风险,不推荐。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/12 23:49:06

技术奇点之后,人类程序员的历史角色

当人工智能越过技术奇点,代码生成、测试用例设计乃至系统运维都将发生质变。本文从软件测试从业者的视角出发,系统探讨人类程序员在奇点之后可能扮演的六种核心角色:系统守护者、需求翻译官、质量伦理法官、人机交互设计师、持续学习组织者与…

作者头像 李华
网站建设 2026/5/12 23:46:52

Perl 进程管理

Perl 进程管理 引言 Perl是一种广泛使用的编程语言,以其强大的文本处理能力和灵活性而著称。在Perl编程中,进程管理是一个重要的环节,它涉及到如何创建、监控和控制进程。本文将详细介绍Perl进程管理的基本概念、常用方法以及最佳实践。 Perl进程管理概述 什么是进程? …

作者头像 李华
网站建设 2026/5/12 23:46:42

长期使用中感受到的Taotoken多模型路由可靠性

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 长期使用中感受到的Taotoken多模型路由可靠性 在将大模型能力深度集成到生产系统的过程中,服务的稳定性与可靠性是决定…

作者头像 李华
网站建设 2026/5/12 23:43:43

Qt实战:手把手教你实现QTableView单元格拖拽交换(附完整代码)

Qt实战:手把手教你实现QTableView单元格拖拽交换(附完整代码) 在开发桌面应用时,表格数据的交互体验直接影响用户效率。想象这样一个场景:你的任务管理系统需要让用户通过拖拽调整任务顺序,但Qt默认的QTab…

作者头像 李华