讲师中心 微信公众号
AI工具推荐 视频效率加速

Java Web会话跟踪核心技术:Cookie原理与实战详解

冬浩君_6733

冬浩君_6733

发布时间:2026-07-31 16:01:16

|

163人浏览过

|

来源于php中文网

原创

Java Web会话跟踪核心技术:Cookie原理与实战详解

本文系统讲解http无状态协议下如何通过cookie实现客户端会话跟踪,涵盖cookie的创建、发送、读取、属性配置及典型应用场景,辅以可运行的servlet代码示例,帮助开发者掌握安全、规范的cookie使用实践。

本文系统讲解http无状态协议下如何通过cookie实现客户端会话跟踪,涵盖cookie的创建、发送、读取、属性配置及典型应用场景,辅以可运行的servlet代码示例,帮助开发者掌握安全、规范的cookie使用实践。

在Web开发中,HTTP协议本身是无状态(stateless) 的——每次请求都被服务器视为独立事件,无法天然识别“这是同一个用户”。而真实业务场景(如登录态保持、购物车记录、个性化推荐)却高度依赖用户状态的连续性。为此,会话跟踪(Session Tracking)技术应运而生。其中,Cookie是最基础、最广泛使用的客户端会话跟踪机制:它由服务器生成并下发,浏览器自动存储并在后续请求中回传,从而在无状态协议上构建出有状态的会话上下文。

✅ Cookie核心工作原理

Cookie的本质是一组键值对(name=value)数据,通过HTTP响应头 Set-Cookie 下发,再通过请求头 Cookie 回传。其生命周期与作用域由服务端显式控制:

属性 说明 示例
name/value 必填项,标识数据名称与内容 new Cookie("username", "zhangsan")
setMaxAge(int seconds) 设置持久化时间(秒)。-1 表示会话级Cookie(关闭浏览器即失效);0 表示立即删除 cookie.setMaxAge(3600); // 1小时
setPath(String path) 指定Cookie生效路径。默认为当前Servlet路径,设为"/"则全站有效 cookie.setPath("/");
setDomain(String domain) 支持跨子域名共享(如example.com下api.example.com与www.example.com共用) cookie.setDomain(".example.com");
setHttpOnly(true) 禁止JavaScript访问,防范XSS攻击(强烈推荐) cookie.setHttpOnly(true);
setSecure(true) 仅HTTPS协议传输,防止中间人窃取 cookie.setSecure(true);

⚠️ 注意:Cookie不能直接存储中文、空格或特殊字符,如需保存中文,必须先使用URLEncoder.encode(str, "UTF-8")编码,读取时再用URLDecoder.decode(str, "UTF-8")解码。

? 实战:发送与读取Cookie的完整Servlet示例

以下是一个典型的两步流程:A Servlet下发Cookie → B Servlet读取并响应

NotebookLM CLI Cookies
NotebookLM CLI Cookies

使用 nlm CLI 检索并回答已上传至 NotebookLM 的文档问题。适用于用户需要查找信息、总结来源或查询特定笔记本时。

下载

立即学习“Java免费学习笔记(深入)”;

// AServlet.java —— 发送Cookie(如用户登录后设置身份标识)
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        String username = req.getParameter("username");
        // 1. 创建Cookie(注意:value需编码避免非法字符)
        Cookie userCookie = new Cookie("user", URLEncoder.encode(username, "UTF-8"));
        // 2. 设置安全属性
        userCookie.setHttpOnly(true);
        userCookie.setSecure(true); // 生产环境务必启用HTTPS
        userCookie.setPath("/");
        userCookie.setMaxAge(60 * 60); // 1小时有效期
        // 3. 下发至客户端
        resp.addCookie(userCookie);
        resp.getWriter().println("Login success! Cookie sent.");
    }
}
// BServlet.java —— 读取Cookie(如访问个人中心时验证身份)
@WebServlet("/profile")
public class ProfileServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        // 1. 获取所有Cookie
        Cookie[] cookies = req.getCookies();
        String username = null;
        if (cookies != null) {
            for (Cookie cookie : cookies) {
                if ("user".equals(cookie.getName())) {
                    // 2. 解码并获取值
                    username = URLDecoder.decode(cookie.getValue(), "UTF-8");
                    break;
                }
            }
        }
        // 3. 响应逻辑
        if (username != null) {
            resp.setContentType("text/html;charset=UTF-8");
            resp.getWriter().println("<h2>Welcome, " + username + "!</h2>");
        } else {
            resp.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Not logged in");
        }
    }
}

? 为什么用Cookie?——澄清常见误区

有开发者疑惑:“既然每条短信/请求都带From号码,为何不直接用手机号做会话标识,而要引入Cookie?” 这个问题触及了协议层与应用层的根本区别:

  • ✅ 手机号是业务标识,不是会话载体:From参数属于应用层数据(Twilio等平台解析后注入HTTP参数),它本身不具备状态维持能力。服务器无法仅凭手机号自动关联多次请求——除非你主动设计数据库映射或内存缓存(如Map<String, SessionData>),而这本质上已脱离Cookie范畴,进入Session或自定义会话管理领域。
  • ✅ Cookie是HTTP协议原生支持的状态机制:浏览器自动完成存储、匹配、回传,无需额外开发;服务端只需标准API操作,兼容所有HTTP客户端(包括非浏览器终端如短信网关)。
  • ✅ 安全性与可控性更高:通过HttpOnly、Secure、SameSite等属性,可精细控制Cookie的访问权限与传输范围,而单纯依赖手机号则易受伪造、重放等攻击。

简言之:手机号用于业务识别(Who),Cookie用于协议状态绑定(When + Where)。二者协同而非互斥——实际项目中常将手机号作为Cookie的value(加密后),既保证唯一性,又享受协议级自动管理优势。

? 最佳实践总结

  • ✅ 永远设置HttpOnly=true:杜绝前端JS篡改或窃取敏感Cookie(如JSESSIONID、auth_token);
  • ✅ 生产环境必启Secure=true:强制HTTPS传输,避免明文泄露;
  • ✅ 避免在Cookie中存储敏感信息:密码、身份证号等应存于服务端Session或数据库,Cookie仅存加密token或ID;
  • ✅ 合理设置Max-Age:会话Cookie(-1)适合短期操作;长期登录建议7–30天,并配合服务端token刷新机制;
  • ✅ 路径与域精准控制:setPath("/")慎用,优先限定到业务子路径(如/shop/),降低跨路径风险。

掌握Cookie,是理解Java Web会话管理的基石。它虽简单,却承载着状态维系的核心契约——在无状态的网络世界里,为每一次交互赋予连续的生命。

热门AI工具

更多
讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

9157

2023.06.15

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

6322

2023.07.05

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

5652

2023.07.31

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

1004

2023.08.01

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

848

2023.08.02

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

1196

2023.08.02

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

2409

2023.08.02

java在线网站
java在线网站

Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

19751

2023.08.03

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

80

2026.09.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
第三期培训_PHP开发
第三期培训_PHP开发

共116课时 | 32.2万人学习

php注册登录系统开发实战
php注册登录系统开发实战

共10课时 | 13.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn