瑞吉外卖中关于短信校验代码的Session问题

关于短信校验代码中HttpSession

由于涉及到阿里云的短信服务,这里改成直接从服务端查看验证码

代码中有一个关于session的问题:

java 复制代码
session.setAttribute("user",user.getId());

这一段代码中为什么session.setAttribute("user",user.getId())可以直接保存到前端浏览器的session,不是说session是保存到服务器吗?

核心概念澄清

HttpSession 数据确实只存储在服务器端(内存/Redis/数据库等)

浏览器永远不会直接获取或存储 Session 数据,它只保存一个 Session ID(通常通过 Cookie)

代码执行流程详解

session.setAttribute("user", user.getId())

将用户ID 存储在服务器的 Session 对象中(键为 "user",值为用户ID)

此时没有任何数据发送到浏览器!

Session ID 的传递机制

当第一次调用 request.getSession() 时,服务器会:

创建一个唯一的 JSESSIONID(如 ABC123)

在响应头中通过 Set-Cookie: JSESSIONID=ABC123 告诉浏览器保存此ID

http 复制代码
HTTP/1.1 200 OK
Set-Cookie: JSESSIONID=ABC123; Path=/; HttpOnly

浏览器后续请求会自动携带此Cookie:

http 复制代码
GET /api/userinfo HTTP/1.1
Cookie: JSESSIONID=ABC123

服务器如何关联数据

当浏览器携带 JSESSIONID=ABC123 访问时:

服务器通过 ABC123 找到对应的 HttpSession 对象

然后从该对象中读取 getAttribute("user") 获取用户ID

为什么看起来像是"保存到前端"?

错觉来源:因为浏览器保存了 JSESSIONID Cookie,使得后续请求能自动关联到服务器的 Session 数据

关键结论

session.setAttribute() 只修改服务器端数据

浏览器仅持有 JSESSIONID(无实际用户数据)

如果浏览器禁用Cookie,Session 机制会失效(除非改用URL重写)

相关推荐
学长毕设3 小时前
基于SpringBoot的实验室资产管理系统
java·spring boot·后端
zzu123zsw4 小时前
从臃肿的模板调用到声明式契约:深入 UniHttp 动态代理与多渠道生命周期扩展
java·spring boot·microsoft·unihttp
源码集结号5 小时前
云诊所门诊系统源码,基于SpringBoot+Vue.js架构,支持多租户设计与Docker容器化部署
java·spring boot·源码·医院信息系统·门诊系统·诊所系统
论文复现现场6 小时前
WRF、FEA 能用 L40S 加速吗?求解器检查、断点恢复与长期运行
java·数据库·算法·wrf·有限元分析·gpu计算·断点续算
啃瓜子的松鼠6 小时前
泛微OAe9-后端二开异步调用
java
秋天的怀念_David7 小时前
第二十一夜 · 数字黑洞与西西弗斯的惩罚
java·程序人生·算法
外收内放7 小时前
Python基础语法练习题(73)
java·前端·python
Wang's Blog7 小时前
Java 项目实战: 交友项目 - 环信后台发送消息测试
java·交友
用户3721574261357 小时前
Java 操作 Word 脚注和尾注:添加、读取与删除
java
小嘉丶学长8 小时前
Day14 · 字典与集合
java·开发语言·网络·python·学习·1024程序员节