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

理解HttpSession

什么是session

在我刚刚从事后端开发的时候,有一个问题困扰了我很久。
就有个玩意叫session。

   @PostMapping("login")public Result login(@RequestParam("id") String id,@RequestParam("password") String password,  HttpSession session) {.......}

每一个java程序员入门的时候。都会遇到这段代码。 刚刚开始接触后端开发,最最最简单 也最典型的入门 就是开发一个登录功能。
我容易理解的是 前端传一个请求过来会映射到这个方法,id 密码是前端输入之后传过来的。
然后我就懵逼了 我擦 这个HttpSession session玩意是从哪里冒出来的???这不是前端的参数列表吗??? 前端什么时候传了这么个玩意???


在解释HttpSession 之前,我们要理解一个东西 就是

Http 协议

在客户端和服务端 使用Http协议通信的时候,http协议的请求都是无状态的。 所谓无状态就是 它不会保留上一次请求的信息。每个HTTP请求都是独立的,服务器不会在不同的请求之间保存任何关于客户端的状态信息。这意味着服务器在处理每个请求时不会考虑之前的请求,也不会跟踪客户端的状态。每个请求都是相互独立的,服务器无法知道两个请求是否来自同一个客户端。

比如登录淘宝app 成功登进去了。 这就是一次http请求。

但是当你再发一次购物请求的时候, 对不起 淘宝的服务端 已经不认识你了。
除非给你一个窗口 你把刚才登录的用户名密码再发一遍 这样它就知道还是第一次登录的你了。

这就意味这 你在淘宝里面 做任何一次请求交互类的行为, 你都得把刚才登录的用户名密码再发一遍 。

这也太痛苦了对吧。

所以早期的网络交互技术中 就诞生了 session 的概念。 它就像一个短期的盒子 暂时让服务器记住你。 这样你就不用每次都带上用户名密码 让服务端认识你了。


在这里插入图片描述

当用户第一次访问服务端的时候, 服务器 会为他创建一个session。
这个session 你可以把它理解成一个 map结构。 它里面有key:sessionid 作为它的主键标识。 还有key是创建时间。比如

public String getId():返回包含唯一标识符值的字符串。
public long getCreationTime():返回创建此会话的时间,自格林威治标准时间 1970 年 1 月 1 日午夜起以毫秒为单位测量。
public long getLastAccessedTime():返回客户端最后一次发送与此会话关联的请求的时间,作为自格林威治标准时间 1970 年 1 月 1 日午夜以来的毫秒数。
public void invalidate():使这个会话无效,然后解除绑定到它的任何对象。

有意思的时候 你可以往这个session里面扔 key-value。 让它帮你存用户信息。你随时可以去取。 直到这个用户的访问会话结束 它才会销毁。

而服务器创建好session之后 它会把这个session id 发给前端。 存储在前端的cookie里面。

ok 现在回到那个淘宝的场景:

你登录之后 。第二次访问要买东西,不是无状态协议 第二次访问 服务器就不认识我了吗?? 这次我带着你给我的session id去找你。 通过session id 取出我第一次登录的时候存在session里面的信息。

你就认识我了对吧。


这就是 HttpSession , 所以当我们看到这段代码的时候要理解:

   @PostMapping("login")public Result login(@RequestParam("id") String id,@RequestParam("password") String password,  HttpSession session) {.......}

这个session 不是前端传过来的。 是后端你的tomcat服务器创建好之后 给你的, 你可以用也可以不用,看你的需要。


拓展

这里再给新玩家拓展一下, 你有没有想过 既然session是服务器创建的,那如果有多台服务器呢? 前端发一个请求过来, 后端有3个tomcat,使用nginx做负载均衡。 这时候你只有一台tomcat存了session 另外2台 第二次请求的时候还是 不认识你, 这时候怎么办呢?

解决思路有很多 常见的有两种:

  • 多台tomcat之间 有session拷贝就可以 同步数据。(就像mysql集群同步数据一样)
  • 使用redis来代替session 实现相同的功能(不知道redis的时候 可以去了解一下)

相关文章:

理解HttpSession

什么是session 在我刚刚从事后端开发的时候,有一个问题困扰了我很久。 就有个玩意叫session。 PostMapping("login")public Result login(RequestParam("id") String id,RequestParam("password") String password, HttpSession se…...

SolVES 模型生态系统服务功能社会价值评估(基于多源环境QGIS、PostgreSQL、ArcGIS、Maxent、R语言)

查看原文>>>SolVES 模型生态系统服务功能社会价值评估(基于多源环境QGIS、PostgreSQL、ArcGIS、Maxent、R语言) 目录 第一章、理论基础与研究热点 第二章、SolVES 4.0 模型运行环境配置 第三章、SolVES 4.0 模型运行 第四章、数据获取与入…...

雷鸟Air Plus体验:视觉大幅升级,影视/办公/游戏全能胜任

雷鸟BirdBath系列XR眼镜一直保持着较快的迭代频率,如今迎来该系列第三款产品:雷鸟Air Plus,新品在视觉体验上得到大幅升级,不仅FOV达到49,边缘成像质量更高,搭配索尼旗舰级Micro OLED屏实现最高120Hz刷新率…...

【Android笔记101】Android之实现搜索界面(搜索弹出框)

这篇文章,主要介绍Android之实现搜索界面(搜索弹出框)。 目录 一、搜索弹出框 1.1、运行效果 1.2、搜索弹出框介绍 1.3、实现搜索弹出框功能...

架构中如何消除语义的分歧?

1、发现不同的语境 每一个交互场景其实都存在着多个角色,每个角色都有自己的独立语境。比如商家从供应商那里采购实体商品这个场景,就有它的独立语境。而商家给供应商打款,虽然交互双方没有变化,但是新的场景又会带来的语境。 我…...

「免费版Axure」原型设计工具!

Axure 是一款经典的原型设计工具,但需要下载电脑端软件使用,对新手要求较高,且在线协作效率低,使用成本较高。即时设计是一款免费在线原型设计工具,支持导入 Axure 文件进行二次布局、评审、演示和分享,让用…...

OPNET Modeler 例程——ALOHA和CSMA的性能对比

文章目录 概述一、创建 ALOHA 协议模型二、创建 CSMA 协议模型三、创建收信机进程和节点模型四、创建总线型链路模型五、创建网络模型六、查看仿真结果总结 概述 本例程以以太网为例论述总线型网络的建模方法,对数据链路层的 MAC 技术进行建模分析,并进…...

kali整体版本更新方法,为啥更新?

玩过kali都知道,如果不更新版本,那么安装某个软件总是有很多依赖版本问题,解决起来的确麻烦,这篇文章彻底解决这些问题。 1,更新源 国外源与国内源的选择 kali默认配置的是国外源,但国外源的下载速度非常慢…...

微服务之服务容错

Informal Essay By English Share a sentence that I think is very reasonable, as long as you can know the underlying logic of anything, you can hold it without fear 参考书籍: “凤凰架构” 引言 在 Martin Fowler 与 James Lewis合写的文章《Micros…...

js 计算日期加减、某某天后的日期、星期几、几月、闰年

需要引入jquery.js. Date.prototype.DateAdd function (strInterval, Number) { var dtTmp this; switch (strInterval) { case s: return new Date(Date.parse(dtTmp) (1000 * Number));// 秒 case n: return new Date(Date.pars…...

Vue3迎来升级,助力企业数字化转型

近年来,随着“互联网”的推进与应用普及,数字化转型已经成为企业发展的必备选项。低代码开发平台的迅速普及和广泛应用,也为企业数字化的转型提供了支撑技术。 JNPF快速开发平台深度集成java.net 6 双技术引擎,具备易维护、便部署…...

Java面试知识点(全)- Java并发- Java并发基础一

Java面试知识点(全) 导航: https://nanxiang.blog.csdn.net/article/details/130640392 注:随时更新 多线程解决什么问题 CPU、内存、I/O 设备的速度是有极大差异的,为了合理利用 CPU 的高性能,平衡这三者的速度差异&#xff0c…...

淘宝商品详情数据采集,支持高并发请求

一、如何通过手动方式查看阿里巴巴商品详情页面的数据 1.淘宝天猫商品详情 API 接口(item_get - 获得淘宝商品详情接口),淘宝API 接口代码对接可以获取到宝贝 ID,宝贝标题,价格,优惠价,掌…...

Java版spring cloud 本工程项目管理系统源码-全面的工程项目管理

​ ​工程项目管理系统是指从事工程项目管理的企业(以下简称工程项目管理企业)受业主委托,按照合同约定,代表业主对工程项目的组织实施进行全过程或若干阶段的管理和服务。 如今建筑行业竞争激烈,内卷严重&#xff0c…...

瑞吉外卖 - 后台系统退出功能(4)

某马瑞吉外卖单体架构项目完整开发文档,基于 Spring Boot 2.7.11 JDK 11。预计 5 月 20 日前更新完成,有需要的胖友记得一键三连,关注主页 “瑞吉外卖” 专栏获取最新文章。 相关资料:https://pan.baidu.com/s/1rO1Vytcp67mcw-PD…...

JavaScript 基础 API DOM(一)

1.1 作用和分类 作用: 就是使用 JS 去操作 html 和浏览器 分类:DOM (文档对象模型)、BOM(浏览器对象模型) 1.2 什么是DOM DOM( Document Object Model——文档对象模型)是用来呈现以及与任意 HTML 或 XML文档交互的…...

Java基础知识:1,DOS命令

1,盘名称 加 : 进入该盘目录下 例如:e: 进入e盘 2,dir 查看当前路径下文件和文件夹 3,md 文件夹名字 》 创建文件夹(md后要加空格) (md make directory) 4,c…...

NEFU ERP 企业资源计划[1] 详细知识点

NEFU ERP 企业资源计划[1] 详细知识点 ERP 企业资源管理计划第 0 章 术语第 1 章 ERP 概述1、什么是 ERP2、ERP 目的3、ERP 应用 第 2 章 ERP 理论与发展1、ERP 发展概述订货点法物料需求计划 MRP(时段 MRP、基本 MRP)闭环 MRPMRP II(制造资源计划&#…...

Science文章复现(Python):图1 - Aircraft obs(机载的观测 CO2)

之前有写过science文章后处理的复现Science文章复现(Python):在机载观测中明显的强烈南大洋碳吸收 在这里是针对图细节的理解: 首先需要下载这个项目 https://github.com/NCAR/so-co2-airborne-obs 这里的环境配置会比较麻烦 con…...

安全基础第十一天:nginx

目 录 一、nginx的反向代理 1.反向代理原理 2.反向代理的几种算法 (1)轮询(默认) (2)weight (3)ip_hash (4)fair(第三方) …...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?

论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

工程地质软件市场:发展现状、趋势与策略建议

一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

代理篇12|深入理解 Vite中的Proxy接口代理配置

在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

Java 二维码

Java 二维码 **技术&#xff1a;**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...

python报错No module named ‘tensorflow.keras‘

是由于不同版本的tensorflow下的keras所在的路径不同&#xff0c;结合所安装的tensorflow的目录结构修改from语句即可。 原语句&#xff1a; from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后&#xff1a; from tensorflow.python.keras.lay…...

vulnyx Blogger writeup

信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面&#xff0c;gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress&#xff0c;说明目标所使用的cms是wordpress&#xff0c;访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...

uniapp 小程序 学习(一)

利用Hbuilder 创建项目 运行到内置浏览器看效果 下载微信小程序 安装到Hbuilder 下载地址 &#xff1a;开发者工具默认安装 设置服务端口号 在Hbuilder中设置微信小程序 配置 找到运行设置&#xff0c;将微信开发者工具放入到Hbuilder中&#xff0c; 打开后出现 如下 bug 解…...

协议转换利器,profinet转ethercat网关的两大派系,各有千秋

随着工业以太网的发展&#xff0c;其高效、便捷、协议开放、易于冗余等诸多优点&#xff0c;被越来越多的工业现场所采用。西门子SIMATIC S7-1200/1500系列PLC集成有Profinet接口&#xff0c;具有实时性、开放性&#xff0c;使用TCP/IP和IT标准&#xff0c;符合基于工业以太网的…...

Unity中的transform.up

2025年6月8日&#xff0c;周日下午 在Unity中&#xff0c;transform.up是Transform组件的一个属性&#xff0c;表示游戏对象在世界空间中的“上”方向&#xff08;Y轴正方向&#xff09;&#xff0c;且会随对象旋转动态变化。以下是关键点解析&#xff1a; 基本定义 transfor…...

API网关Kong的鉴权与限流:高并发场景下的核心实践

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 引言 在微服务架构中&#xff0c;API网关承担着流量调度、安全防护和协议转换的核心职责。作为云原生时代的代表性网关&#xff0c;Kong凭借其插件化架构…...