当前位置: 首页 > article >正文

HttpSession使用方法及原理

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);

http://www.kler.cn/news/329631.html

相关文章:

  • .c、.cpp、.cc、.cxx、.cp后缀的区别
  • YOLOv8改进,YOLOv8改进主干网络为GhostNetV3(2024年华为的轻量化架构,全网首发),助力涨点
  • C++ STL(3)list
  • 卡夫卡的理解
  • 事务原理,以及MVCC如何实现RC,RR隔离级别的
  • 告别PPT熬夜!Kimi+AIPPT一键生成PPT,效率upup!
  • Docker全家桶:从0到加载本地项目
  • docker 部署 Seatunnel 和 Seatunnel Web
  • 浏览器用户行为集群建设-数仓建模-数据计算
  • 828华为云征文|华为云Flexus云服务器X实例搭建部署H5美妆护肤分销商城、前端uniapp
  • pytorch千问模型源码分析
  • leetcode.每日一题.2516.每种字符至少取 K 个
  • 【C++】C++基础
  • 魔都千丝冥缘——软件终端架构思维———未来之窗行业应用跨平台架构
  • D21【python接口自动化学习】-python基础之内置数据类型
  • Git记录
  • C语言:排序(1)
  • 毕业设计选题:基于ssm+vue+uniapp的家庭记账本小程序
  • 在线远程考试|基于springBoot的在线远程考试系统设计与实现(附项目源码+论文+数据库)
  • 【C++】“list”的介绍和常用接口的模拟实现
  • 进程通信——内存映射
  • Java项目实战II基于Java+Spring Boot+MySQL的智能物流管理系统(文档+源码+数据库)
  • [大语言模型-论文精读] 阿里巴巴-通过多阶段对比学习实现通用文本嵌入
  • 从0开始实现es6 promise类
  • 【可答疑】基于51单片机的体温心率血氧检测系统(含仿真、代码、报告等)
  • I2C-Tools的安装与使用方法(详解,一篇教会你熟练使用)
  • 数据库索引和磁盘的关系大揭秘
  • Leetcode 3307. Find the K-th Character in String Game II
  • 无线通信系统仿真与原型设计:MATLAB实践指南
  • LDRA Testbed(TBrun)软件集成测试(部件测试)_操作指南