瑞吉外卖中关于短信校验代码的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重写)

相关推荐
启山智软12 分钟前
【中大企业选择源码部署商城系统】
java·spring·商城开发
我真的是大笨蛋14 分钟前
深度解析InnoDB如何保障Buffer与磁盘数据一致性
java·数据库·sql·mysql·性能优化
怪兽源码42 分钟前
基于SpringBoot的选课调查系统
java·spring boot·后端·选课调查系统
恒悦sunsite1 小时前
Redis之配置只读账号
java·redis·bootstrap
梦里小白龙1 小时前
java 通过Minio上传文件
java·开发语言
人道领域1 小时前
javaWeb从入门到进阶(SpringBoot事务管理及AOP)
java·数据库·mysql
sheji52611 小时前
JSP基于信息安全的读书网站79f9s--程序+源码+数据库+调试部署+开发环境
java·开发语言·数据库·算法
毕设源码-邱学长1 小时前
【开题答辩全过程】以 基于Java Web的电子商务网站的用户行为分析与个性化推荐系统为例,包含答辩的问题和答案
java·开发语言
摇滚侠2 小时前
Java项目教程《尚庭公寓》java项目从开发到部署,技术储备,MybatisPlus、MybatisX
java·开发语言
€8112 小时前
Java入门级教程24——Vert.x的学习
java·开发语言·学习·thymeleaf·数据库操作·vert.x的路由处理机制·datadex实战