尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

Spring MVC 获取 Cookie、Session 与 Header 详解

发布时间:2026/9/26 9:17:55

资讯中心
01
ARTICLE

Spring MVC 获取 Cookie、Session 与 Header 详解

Spring MVC 获取 Cookie、Session 与 Header 详解
一、前言为什么需要 Cookie 与 SessionHTTP 协议本身是无状态的即客户端与服务器之间的每次通信都是独立的服务器无法默认识别两次请求是否来自同一用户。但是在实际开发中我们往往需要知道请求之间的关联关系例如用户登录后第二次访问时服务器要能识别出该用户已登录。解决办法就是使用Cookie与SessionCookie客户端保存用户信息的机制。Session服务器端保存用户信息的机制。两者通过SessionId关联SessionId 通常存储在 Cookie 中。二、理解 Session会话一个客户端与服务器之间的不中断的请求响应过程。服务器能识别出请求是否来自同一客户端。服务器同一时刻收到大量请求需要区分每个请求属于哪个用户哪个会话因此需要在服务器端记录每个会话与用户信息的对应关系。Session本质是一个哈希表键值对结构KeySessionId服务器生成的唯一性字符串Value用户信息可灵活设计Session 工作流程用户登录时服务器在 Session 中新增记录并通过 HTTP 响应中的Set-Cookie字段将SessionId返回给客户端。客户端后续请求时通过 HTTP 请求中的Cookie字段带上SessionId。服务器收到请求后根据 SessionId 在 Session 中获取对应用户信息再进行后续操作。找不到则重新创建 Session 并返回新的 SessionId。注意Session 默认保存在内存中重启服务器会导致 Session 数据丢失。三、Cookie 与 Session 的区别对比项CookieSession保存位置客户端服务器端关联方式通过 SessionId 关联通过 SessionId 关联是否必须配合不是必须可单独使用不是必须SessionId 可通过 URL 传递安全性可伪造不安全相对安全Cookie 和 Session 经常配合使用但不是必须。Cookie 可以保存一些非身份信息的数据。SessionId 也可以通过 URL 传递不一定非要通过 Cookie/Set-Cookie。四、获取 Cookie4.1 传统方式使用 HttpServletRequestSpring MVC 基于 Servlet API 构建HttpServletRequest和HttpServletResponse是内置对象直接在方法中添加声明即可使用。RequestMapping(/m10) public String method10(HttpServletRequest request, HttpServletResponse response) { // 获取所有 cookie 信息 Cookie[] cookies request.getCookies(); // 打印 Cookie 信息 StringBuilder builder new StringBuilder(); if (cookies ! null) { for (Cookie ck : cookies) { builder.append(ck.getName() : ck.getValue()); } } return Cookie信息: builder; }HttpServletRequest代表客户端请求封装了所有请求信息。HttpServletResponse代表服务器响应封装了所有响应信息。4.2 简洁方式使用 CookieValue 注解RequestMapping(/getCookie) public String cookie(CookieValue(bite) String lss) { return lss lss; }访问http://127.0.0.1:8080/param/getCookie即可直接获取指定名称的 Cookie 值。五、获取 SessionSession 是服务器端机制需要先存储再获取基于HttpServletRequest操作。5.1 Session 存储RequestMapping(/setSess) public String setsess(HttpServletRequest request) { // 获取 Session 对象 HttpSession session request.getSession(); if (session ! null) { session.setAttribute(username, java); } return session 存储成功; }getSession()内部会提取请求 Cookie 中的 SessionId根据 SessionId 获取对应 Session 对象。两种获取方式HttpSession getSession(boolean create)参数为true时不存在则新建为false时不存在返回null。HttpSession getSession()等价于getSession(true)默认新建。void setAttribute(String name, Object value)绑定对象到 Session。5.2 Session 读取RequestMapping(/getSess) public String sess(HttpServletRequest request) { // 如果 session 不存在不会自动创建 HttpSession session request.getSession(false); String username null; if (session ! null session.getAttribute(username) ! null) { username (String) session.getAttribute(username); } return username username; }Object getAttribute(String name)返回指定名称的对象不存在返回null。运行观察先访问http://127.0.0.1:8080/param/setSess通过 Fiddler 可看到响应中Set-Cookie告知客户端存储 SessionId。再访问http://127.0.0.1:8080/param/getSess请求中通过 Cookie 传递 SessionId。5.3 简洁获取 Session方式一SessionAttributeRequestMapping(/getSess2) public String sess2(SessionAttribute(value username, required false) String username) { return username username; }访问http://127.0.0.1:8080/param/getSess2。5.4 简洁获取 Session方式二HttpSession 内置对象javaRequestMapping(/getSess3) public String sess3(HttpSession session) { String username (String) session.getAttribute(username); return username username; }Session 不存在时会自动创建。访问http://127.0.0.1:8080/param/getSess3。六、获取 Header6.1 传统方式HttpServletRequest.getHeaderRequestMapping(/param10) public String param10(HttpServletRequest request, HttpServletResponse response) { String userAgent request.getHeader(User-Agent); return name userAgent; }使用getHeader方法参数对应 HTTP 请求报头的 Key。访问http://127.0.0.1:8080/param/getHeader可通过 Fiddler 验证 User-Agent 是否正确。6.2 简洁方式RequestHeader 注解javaRequestMapping(/header) public String header(RequestHeader(User-Agent) String userAgent) { return userAgent userAgent; }RequestHeader注解的参数值为 HTTP 请求报头中的 Key。访问http://127.0.0.1:8080/param/getHeader2。
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。