【Spring MVC篇】Cookie和Session的获取 & Header的获取

您所在的位置:网站首页 获取session对象使用 【Spring MVC篇】Cookie和Session的获取 & Header的获取

【Spring MVC篇】Cookie和Session的获取 & Header的获取

2024-07-10 14:50| 来源: 网络整理| 查看: 265

个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【Spring MVC】 本专栏旨在分享学习Spring MVC的一点学习心得,欢迎大家在评论区交流讨论💌 在这里插入图片描述

Cookie是客户端保存用户信息的一种机制,Session服务器段保存用户信息的一种机制。Cookie和Session之间主要是通过SessionId关联起来的。

目录 一、获取Cookie方式①方式② 二、获取Session方式①存储Session 方式②方式③ 三、获取Header方式②

一、获取Cookie 方式①

获取Cookie代码如下(使用Servlet API的方式):

@RequestMapping("/getCookie") public String getCookie(HttpServletRequest request) { Cookie[] cookies = request.getCookies(); if(cookies != null) { Arrays.stream(cookies).forEach(cookie -> { System.out.println(cookie.getName() + ":" + cookie.getValue()); }); } return "获取cookie成功"; }

注意:cookies一开始是空的,所以要加上if判断,演示结果如下:

在这里插入图片描述

下面来进行Cookie的伪造(F12进入开发者工具): 在这里插入图片描述 在这里插入图片描述

方式②

方式①是使用比较原始的方式(即Servlet API)来获取Cookie

现在我们重启服务器,来获取key为aaa的值:

代码如下:

@RequestMapping("/getCookie2") public String getCookie2(@CookieValue String aaa) { return "cookie中aaa存储的值是:" + aaa; }

在这里插入图片描述

上面的代码使用了Spring框架的@CookieValue注解来获取cookie的值。具体来说,@CookieValue注解作为方法的参数,会自动从请求中获取名为"aaa"的cookie的值,并赋给方法中的变量aaa。然后将该变量拼接到返回的字符串中,最终返回结果。

可以发现重启服务器之后仍然可以得到key为aaa中存储的值,这是因为Cookie是客户端保存用户信息的一种机制(即与浏览器有关,与服务器重启无关)。

综上,Servlet API和Spring框架中的@CookieValue注解都可以获取Cookie;区别就是Servlet API可以获取请求中的所有cookie;而@CookieValue注解来直接从请求中获取指定cookie的值,将其赋给方法参数。

二、获取Session

在这里插入图片描述

方式①

使用Servlet API来获取Session,代码如下:

@RequestMapping("/getSession") public String getSession(HttpServletRequest request) { // 服务器中每个会话都会创建一个Session HttpSession session = request.getSession(false);// getSession根据Sessionid来获取对应的Session对象默认值为true // 当传入true时,如果请求中已经存在一个会话(即Session不为空),就返回该会话;如果没有会话(即Session为空),则创建一个新的会话并返回。 // 当传入false时,如果请求中已经存在一个会话,就返回该会话;如果没有会话,则返回 null。 if(session != null) { String name = (String)session.getAttribute("name"); return "名称:" + name; } return "session为空"; }

结果如下:

Cookie中虽然有值,但是我们可以看到运行结果显示Session是空的(因为二者本身是没有关系的,但是可以通过Sessionid进行关联)。在这里插入图片描述 在这里插入图片描述

存储Session

Cookie和Session是通过Sessionid来进行关联的,由于Session是服务器端的,所以我们无法伪造Session,现在我们通过代码来存储Session(Session是服务器端的机制,我们需要先存储,才能再获取):

@RequestMapping("/setSession") public String setSession(HttpServletRequest request) { HttpSession session = request.getSession(); session.setAttribute("name","lisi"); return "success"; }

结果如下: 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 如上图,在发起请求时,无论是否需要Cookie,请求中的信息都会包含Cookie信息。当服务器处理请求后,会返回响应给客户端。客户端在接收到响应后,会根据响应中包含的Set-Cookie头部字段解析和处理Cookie信息。浏览器会解析Set-Cookie头部字段,然后将Cookie保存到浏览器的Cookie存储中。

此时我们再次getSession,如下: 在这里插入图片描述

方式②

代码如下(使用了Spring MVC框架的@SessionAttribute注解来获取会话(session)中的属性值。):

@RequestMapping("/getSession2") public String getSession2(@SessionAttribute String name) { return "name" + name; }

我们重启服务器之后,Session就已经清空了,因为Session是存储在服务器上的(默认是存储在内存中的)。所以此时我们是拿不到数据的,请看: 在这里插入图片描述

在这里插入图片描述

重启服务器之后运行如下: 在这里插入图片描述

我们现在重新setSession: 在这里插入图片描述 然后getSession2: 在这里插入图片描述

方式③

使用Servlet API提供的HttpSession对象来获取会话(session)。

代码如下:

@RequestMapping("/getSession3") public String getSession3(HttpSession session) { String name = (String)session.getAttribute("name"); return "名称:" + name; }

在这里插入图片描述

下面是运行结果的演示过程: 我们依然是要先setSession(因为重启了服务器): 在这里插入图片描述 然后getSession3: 在这里插入图片描述

这种方式是直接使用HttpSession对象来获取会话属性值,不需要借助注解或其他操作。

三、获取Header

使用Servlet API提供的HttpServletRequest对象来获取请求的Header信息(在方法参数中声明HttpServletRequest对象,通过Spring MVC会自动注入该对象。)。

代码如下:

@RequestMapping("/getHeader") public String getHeader(HttpServletRequest request) { String userAgent = request.getHeader("User-Agent"); return "User-Agent" + userAgent; }

结果如下: 在这里插入图片描述

方式②

使用Spring MVC提供的@RequestHeader注解来获取请求的Header信息。

代码如下:

@RequestMapping("/getHeader2") public String getHeader2(@RequestHeader("User-Agent") String userAgent) { return "User-Agent" + userAgent; }

结果如下:

在这里插入图片描述 好了,以上就是本文的全部内容了。希望各位友友可以一键三连哈!!!

在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3