HttpSession使用方法及原理
- 一、HttpSession使用流程说明
- 二、登录
- 概述
- 具体
- 三、访问过程
- 概述
- 具体
一、HttpSession使用流程说明
1.用户发送登录请求到服务器。
2.服务器处理登录请求,调用userService.login(loginUser)。
3.如果登录成功,服务器调用request.getSession()获取或创建会话。
4.服务器通过【JSESSIONID:session】键值对的方式保存session
5.服务器将会话ID(JSESSIONID)通过Set-Cookie头部发送给浏览器。
6.浏览器将JSESSIONID存储在cookie中。
7.服务器设置会话属性session.setAttribute(“user”, user);。
8.服务器返回登录成功的响应给前端。
9.在后续的请求中,浏览器会自动将JSESSIONID通过Cookie头部发送给服务器,以便服务器能够识别用户的会话。
二、登录
概述
1.用户调用登录接口
2.存储用户的session信息(新生成或者读取老的),并返回前端JSESSIONID
3.浏览器将JSESSIONID存储至 cookie中
HttpSession session = request.getSession();//
session.setAttribute("user",user);
具体
当你调用 request.getSession() 方法时,如果当前请求还没有与之关联的会话(HttpSession),服务器会自动创建一个新的会话,并生成一个唯一的会话ID(如JSESSIONID),然后这个会话ID会被自动地通过HTTP响应的Set-Cookie头部发送给客户端(即浏览器)。
虽然没有直接操作JSESSIONID或将其返回给前端,但当你调用request.getSession()并设置会话属性时,服务器已经负责了JSESSIONID的创建、发送和接收工作。
(使用Apifox进行接口测试)如下图所示,当访问登录接口时,返回的报文Header头中,包含set-Cookie字段,其中就记录了JSESSIONID
三、访问过程
概述
1.根据cookie带过来的JSESSIONID,通过键值对关系,来获取session
2.根据session来获取user用户信息
//参数为false情况下,获取session(但不会自动创建一个空的,不存在则返回null)
HttpSession session = request.getSession(false);
UserInfo userinfo = session.getAttribute("user")
具体
使用Apifox接口测试工具,访问其他接口
在Header中有一个Cookie字段
点击进入Cookie,可以看见JSESSIONID这个信息
当用户访问接口时,HttpServletRequest对象调用getSession时,就会根据JSESSIONID自动去获取对应的HttpSession对象信息
HttpSession session = request.getSession(false);