个人主页:兜里有颗棉花糖
欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创
收录于专栏【Spring MVC】
本专栏旨在分享学习Spring MVC的一点学习心得,欢迎大家在评论区交流讨论💌
**Cookie是客户端保存用户信息的一种机制,Session服务器段保存用户信息的一种机制。
Cookie和Session之间主要是通过SessionId关联起来的。
**
目录
一、获取Cookie
方式①
获取Cookie代码如下(使用Servlet API的方式):
@RequestMapping("/getCookie")publicStringgetCookie(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")publicStringgetCookie2(@CookieValueString 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")publicStringgetSession(HttpServletRequest request){// 服务器中每个会话都会创建一个SessionHttpSession 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")publicStringsetSession(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")publicStringgetSession2(@SessionAttributeString name){return"name"+ name;}
我们重启服务器之后,
Session
就已经清空了,因为Session是存储在服务器上的(默认是存储在内存中的)。所以此时我们是拿不到数据的,请看:
重启服务器之后运行如下:
我们现在重新setSession:
然后getSession2:
方式③
使用Servlet API提供的HttpSession对象来获取会话(session)。
代码如下:
@RequestMapping("/getSession3")publicStringgetSession3(HttpSession session){String name =(String)session.getAttribute("name");return"名称:"+ name;}
下面是运行结果的演示过程:
我们依然是要先setSession(因为重启了服务器):
然后getSession3:
**
这种方式是直接使用HttpSession对象来获取会话属性值,不需要借助注解或其他操作。
**
三、获取Header
**使用Servlet API提供的
HttpServletRequest
对象来获取请求的Header信息(在方法参数中声明HttpServletRequest对象,通过Spring MVC会自动注入该对象。)。**
代码如下:
@RequestMapping("/getHeader")publicStringgetHeader(HttpServletRequest request){String userAgent = request.getHeader("User-Agent");return"User-Agent"+ userAgent;}
结果如下:
方式②
**使用Spring MVC提供的
@RequestHeader
注解来获取请求的Header信息。**
代码如下:
@RequestMapping("/getHeader2")publicStringgetHeader2(@RequestHeader("User-Agent")String userAgent){return"User-Agent"+ userAgent;}
结果如下:
好了,以上就是本文的全部内容了。希望各位友友可以一键三连哈!!!
版权归原作者 兜里有颗棉花糖 所有, 如有侵权,请联系我们删除。