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

HttpSession 的运行原理

HttpSession 的运行原理(基于 Java Web)

HttpSession 是 Java Web 开发中用于在服务器端存储用户会话数据的机制,它的核心作用是跟踪用户状态(如登录信息、购物车数据等)。


1. HttpSession 的基本概念

  • 会话(Session):指用户从访问网站到关闭浏览器(或超时)期间的一系列交互过程。

  • Session ID服务器为每个会话分配的唯一标识符(通常是一个 JSESSIONID Cookie)

  • 存储位置:Session 数据默认存储在 服务器内存 中(Tomcat/Jetty等),也可以配置到 Redis、数据库等。


2. HttpSession 的工作流程

(1)创建 Session

当客户端(浏览器)第一次访问服务器时:

  1. 服务器检查请求是否携带 JSESSIONID Cookie。

  2. 如果没有,则创建一个新的 Session,并生成唯一的 JSESSIONID

  3. 服务器在响应头中返回 Set-Cookie: JSESSIONID=xxx,浏览器保存该 Cookie。

(2)后续请求携带 Session ID

浏览器在后续请求中会自动带上 JSESSIONID Cookie:

GET /home HTTP/1.1
Cookie: JSESSIONID=abc123

服务器根据 JSESSIONID 找到对应的 Session,并读取/写入数据。

(3)相关配置

        在一些前后端分离的项目中,涉及跨域问题,这时如果想让会话携带Cookie等凭证,那么需要配置: withCredentials: true。withCredentials可以控制请求是否携带Cookie等凭证,同样的后端也需要设置。

         前端代码实例:

fetch('http://api.example.com/login', {method: 'POST',credentials: 'include', // 等效于 withCredentials: trueheaders: { 'Content-Type': 'application/json' },body: JSON.stringify({ username: 'user', password: 'pass' })
});

       后端代码:

Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: <具体域名>  

注意前后端都需要配置,否则也会报错

(3)Session 失效

Session 会在以下情况被销毁:

  • 超时session.setMaxInactiveInterval(1800)(30分钟无活动则失效)。

  • 主动销毁:调用 session.invalidate()

  • 服务器重启(如果 Session 未持久化到外部存储)。


3. HttpSession 的核心 API

方法说明
request.getSession()获取 Session(如果没有则创建)
request.getSession(false)获取 Session(如果没有则返回 null
session.getId()获取 Session ID
session.setAttribute("key", value)存储数据
session.getAttribute("key")读取数据
session.removeAttribute("key")删除数据
session.invalidate()销毁 Session
session.setMaxInactiveInterval(seconds)设置超时时间(秒)

4. HttpSession 的底层实现

(1)Session 存储方式

  • 默认:存储在 服务器内存(Tomcat 使用 ConcurrentHashMap)。

  • 分布式环境:使用 Redis数据库 或 Session 复制(如 Spring Session)。

(2)Session ID 的传递方式

  • Cookie(默认)

    Set-Cookie: JSESSIONID=abc123; Path=/; HttpOnly
  • URL 重写(禁用 Cookie 时):

    <a href="/home;jsessionid=abc123">Home</a>

5. 代码示例

(1)存储 Session 数据

@GetMapping("/login")
public String login(HttpServletRequest request) {HttpSession session = request.getSession(); // 获取或创建 Sessionsession.setAttribute("user", "张三"); // 存储数据session.setMaxInactiveInterval(1800); // 设置30分钟超时return "登录成功";
}

(2)读取 Session 数据

@GetMapping("/profile")
public String profile(HttpServletRequest request) {HttpSession session = request.getSession(false); // 不自动创建 Sessionif (session == null) {return "未登录";}String user = (String) session.getAttribute("user");return "当前用户: " + user;
}

(3)销毁 Session(退出登录)

@GetMapping("/logout")
public String logout(HttpServletRequest request) {HttpSession session = request.getSession(false);if (session != null) {session.invalidate(); // 销毁 Session}return "已退出登录";
}

6. 常见问题

(1)Session 和 Cookie 的区别

SessionCookie
存储位置服务器浏览器
安全性较高(数据在服务端)较低(可能被篡改)
存储大小较大(依赖服务器内存)较小(一般 ≤4KB)
生命周期可设置超时时间可设置过期时间

(2)如何防止 Session 劫持?

  • 使用 HTTPS 加密传输 JSESSIONID

  • 设置 HttpOnly 和 Secure 标志,防止 XSS 攻击:

    // Spring Boot 配置(application.properties)
    server.servlet.session.cookie.http-only=true
    server.servlet.session.cookie.secure=true

7. 总结

  1. HttpSession 用于在服务器端存储用户会话数据,依赖 JSESSIONID 标识用户。

  2. 默认存储在内存,分布式环境可用 Redis 共享 Session。

  3. 核心操作setAttribute()getAttribute()invalidate()

  4. 安全建议:使用 HttpOnly + Secure Cookie,避免 Session 劫持。

相关文章:

HttpSession 的运行原理

HttpSession 的运行原理&#xff08;基于 Java Web&#xff09; HttpSession 是 Java Web 开发中用于在服务器端存储用户会话数据的机制&#xff0c;它的核心作用是跟踪用户状态&#xff08;如登录信息、购物车数据等&#xff09;。 1. HttpSession 的基本概念 会话&#xff0…...

Axure应用交互设计:表格跟随菜单移动效果(超长表单)

亲爱的小伙伴,在您浏览之前,烦请关注一下,在此深表感谢!本文如有帮助请订阅 Axure产品经理精品视频课已登录CSDN可点击学习https://edu.csdn.net/course/detail/40420 课程主题:表格跟随菜单移动 主要内容:表格交互设计、动态面板嵌套、拖动时事件、移动动作 应用场景…...

Flannel vxlan模式的优缺点

VXLAN 模式的特点、优缺点 优点 高性能&#xff1a;VXLAN 利用内核态处理封装/解封装&#xff0c;性能优于用户态方案&#xff08;如 UDP&#xff09;&#xff0c;适合大规模集群。网络隔离&#xff1a;通过 VNI&#xff08;VXLAN Network Identifier&#xff0c;24 位&#…...

中电金信参编的国家标准《信息技术 中间件 消息中间件技术要求》正式发布

近日&#xff0c;国家市场监督管理总局、国家标准化管理委员会发布中华人民共和国国家标准公告&#xff08;2025年第10号&#xff09;&#xff0c;GB/T 28168—2025《信息技术 中间件 消息中间件技术要求》国家标准正式发布&#xff0c;并将于2025年11月1日正式实施。中电金信作…...

AcroForm 格式化文本(域)字段

概述 Acrobat提供了两个事件(脚本位置)来处理文本字段格式化:Keystroke(更改)事件和 Format事件。这两个事件可以共同控制输入到字段中的数据的格式以及文本字段中显示数据的外观。本文中涉及的所有脚本以及更多示例都包含在FormattingExamples.pdf文件中。 Keystroke事…...

机器学习——聚类算法练习题

一、 随机创建不同二维数据集作为训练集 &#xff0c;并结合k-means算法将其聚类 &#xff0c;你可以尝试分别聚类不同数量的簇 &#xff0c;并观察聚类 效果&#xff1a; 聚类参数n_cluster传值不同 &#xff0c;得到的聚类结果不同 代码展示&#xff1a; from sklearn.da…...

U-BOOT

使用正点原子已经移植好的U-BOOT编译完成后拷贝到SD卡中烧写到板子上中&#xff0c;将开发板设为SD卡启动模式&#xff0c;上电启动开发板&#xff1b;打开 MobaXterm 终端模拟软件&#xff0c;设置好串口参数连接开发板 USB 调试串口&#xff0c;最后按核心板上的 PS_RST 复位…...

JVM之虚拟机运行

虚拟机运行快速复习 try-catch&#xff1a;catch-异常表栈展开&#xff0c;finally-代码复制异常表兜底 类的生命周期&#xff1a;加载&#xff0c;连接&#xff08;验证&#xff0c;准备&#xff0c;解析&#xff09;&#xff0c;初始化&#xff0c;使用&#xff0c;卸载 类…...

玩转ChatGPT:DeepSeek实战(统一所在地格式)

一、写在前面 前段时间去交流&#xff0c;又被问到一个实际问题&#xff1a; 在组织全区活动时&#xff0c;我们设计了一份签到表&#xff0c;其中包含“所在单位地区”一列&#xff0c;目的是希望按地级市&#xff08;如南宁市、柳州市等&#xff09;对参与者进行分组&#…...

蓝桥杯题库经典题型

1、数列排序&#xff08;数组 排序&#xff09; 问题描述 给定一个长度为n的数列&#xff0c;将这个数列按从小到大的顺序排列。1<n<200 输入格式 第一行为一个整数n。 第二行包含n个整数&#xff0c;为待排序的数&#xff0c;每个整数的绝对值小于10000。 输出格式 输出…...

极限学习机进行电厂相关数据预测

使用极限学习机&#xff08;Extreme Learning Machine, ELM&#xff09;进行电厂相关数据预测的详细步骤和MATLAB代码示例。假设任务是预测电厂发电量或设备状态&#xff08;如温度、压力&#xff09;&#xff0c;代码包含数据预处理、ELM模型构建、训练与预测全过程。 1. 数据…...

【Axure视频教程】中继器表格间批量控制和传值

今天教大家在Axure中制作中继器表格间批量控制和传值的原型模板&#xff0c;效果包括&#xff1a; 选中和取消选中——点击表格中的多选按钮可以选中或取消选中该行内容&#xff1b; 全选和全部取消选中——点击表头左上角的多选按钮可以选中或取消选中表格的所有内容&#xf…...

Axure高级交互设计:文本框循环赋值实现新增、修改和查看

亲爱的小伙伴,在您浏览之前,烦请关注一下,在此深表感谢!本文如有帮助请订阅本专栏! Axure产品经理精品视频课已登录CSDN可点击学习https://edu.csdn.net/course/detail/40420 课程主题:文本框循环赋值 主要内容:使用设置文本动作实现文本框、文字标签的读取与赋值 应…...

Springboot之类路径扫描

SpringBoot框架中默认提供的扫描类为&#xff1a;ClassPathBeanDefinitionScanner。 webFlux框架中借助RepositoryComponentProvider扫描符合条件的Repository。 public class ClassPathScanningCandidateComponentProvider{private final List<TypeFilter> includeFilt…...

是 OpenCV 的 CUDA 模块中用于在 GPU 上对图像或矩阵进行转置操作函数cv::cuda::transpose

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::cuda::transpose 是 OpenCV 的 CUDA 模块中的一个函数&#xff0c;用于在 GPU 上对图像或矩阵进行转置操作&#xff08;Transpose&#xff0…...

2025B卷 - 华为OD机试七日集训第1期 - 按算法分类,由易到难,循序渐进,玩转OD

目录 推荐刷题方法&#xff1a; 一、适合人群二、本期训练时间三、如何参加四、七日集训第1期五、精心挑选21道高频100分经典题目&#xff0c;作为入门。第1天、逻辑分析第2天、逻辑分析第3天、逻辑分析第4天第5天第6天第7天 六、集训总结国内直接使用最新o3、o4-mini-high、GP…...

从数据中台到数据飞轮:数字化转型的演进之路

从数据中台到数据飞轮&#xff1a;数字化转型的演进之路 数据中台 数据中台是企业为整合内部和外部数据资源而构建的中介层&#xff0c;实现数据的统一管理、共享和高效利用&#xff0c;目标是打破信息孤岛&#xff0c;提高数据使用效率&#xff0c;支持业务决策和创新 实施成本…...

【Linux网络】HTTPS

HTTPS协议原理 定义 HTTPS 也是一个应用层协议.是在HTTP协议的基础上引入了一个加密层. HTTP 协议内容都是按照文本的方式明文传输的.这就导致在传输过程中会出现一些被篡改的情况。 加密 加密就是把明文(要传输的信息)进行一系列变换,生成密文. 解密就是把密文再进行一系…...

UE5中制作动态数字Decal

在进行城市道路编辑时&#xff0c;经常需要绘制人行道、交通标志、停车线等路面元素。如果能够使用具有动态修改功能的 Decal&#xff08;贴花&#xff09;&#xff0c;将大大提升编辑效率和灵活性。接下来讲解如何制作。 1.首先准备一张包含所需元素的Texture&#xff0c;这里…...

销量预测评估指标

销量预测评估指标 一、背景 在零售、供应链等场景中&#xff0c;销量预测的准确性直接影响库存管理、成本控制和客户满意度&#xff1a; 预测偏低&#xff1a;可能导致缺货&#xff08;损失销售额和客户信任&#xff09;。预测偏高&#xff1a;导致库存积压&#xff08;增加…...

Unity3d 打包安卓平台(Android apk)报错Gradle build failed解决方法

问题 Unity3d 版本为2022.3.*版本&#xff0c;而且工程内部没有包含比较特殊的插件&#xff0c;安卓模块(module)也是随编辑一起安装&#xff0c;JDK、Android SDK Tools、Android NDK和Gradle都是默认安装。打包设置Project Settings也是默认设置&#xff0c;打包的工程不包含…...

STM32 启动文件分析

一、启动文件的核心作用 STM32启动文件&#xff08;如startup_stm32f10x_hd.s&#xff09;是芯片上电后执行的第一段代码&#xff0c;用汇编语言编写&#xff0c;主要完成以下关键任务&#xff1a; ​初始化堆栈指针&#xff08;SP&#xff09;​​ 设置主堆栈指针&#xff08…...

OSCP备战-Kioptrix4详细教程

目录 配置靶机 目标IP探测 ​编辑端口扫描 139/445端口 Samba 80端口获取shell 绕过lshell 方法一 ​编辑 方法二 ​编辑提权 内核漏洞 mysql udf提权 配置靶机 使用vm新建虚拟机&#xff0c;选择vmdk文件打开。 目标IP探测 arp-scan -l 得出目标IP&#xff1a;19…...

清华大学开源软件镜像站地址

清华大学开源软件镜像站&#xff1a; https://mirrors.tuna.tsinghua.edu.cn/...

java基础-package关键字、MVC、import关键字

1.package关键字&#xff1a; &#xff08;1&#xff09;为了更好管理类&#xff0c;提供包的概念 &#xff08;2&#xff09;声明类或接口所属的包&#xff0c;声明在源文件首行 &#xff08;3&#xff09;包&#xff0c;属于标识符&#xff0c;用小写字母表示 &#xff0…...

uniapp(vue3)动态计算swiper高度封装自定义hook

// useCalculateSwiperHeight.ts import { ref, onMounted } from vue;export function useCalculateSwiperHeight(headerSelector: string .header-search, tabsWrapperSelector: string .u-tabs .u-tabs__wrapper) {const swiperHeight ref<number>(0);// 封装uni.g…...

Java SpringMVC 和 MyBatis 整合项目的事务管理配置详解

目录 一、事务管理的基本概念二、在 SpringMVC 和 MyBatis 整合项目中配置事务管理1. 配置数据源2. 配置事务管理器3. 使用事务注解4. 配置 MyBatis 的事务支持5. 测试事务管理三、总结在企业级应用开发中,事务管理是确保数据一致性和完整性的重要机制。特别是在整合了 Spring…...

C++的历史与发展

目录 一、C 的诞生与早期发展 &#xff08;一&#xff09;C 语言的兴起与局限 &#xff08;二&#xff09;C 的雏形&#xff1a;C with Classes &#xff08;三&#xff09;C 命名与早期特性丰富 二、C 的主要发展历程 &#xff08;一&#xff09;1985 年&#xff1a;经典…...

亚马逊云科技:引领数字时代的云服务先锋

在数字经济浪潮席卷全球的当下&#xff0c;企业和个人面临着数据爆炸、业务快速迭代等诸多挑战&#xff0c;亟需强大且灵活的云计算能力助力发展。亚马逊云科技凭借多年深耕与创新&#xff0c;成为数字时代的云服务先锋&#xff0c;为用户打造全方位、高质量的云计算解决方案。…...

基于Java和PostGIS的AOI面数据球面面积计算实践

目录 前言 一、计算方法简介 二、球面面积计算 1、AOI数据转Polygon 2、Geotools面积计算 3、GeographicLib面积计算 4、PostGIS面积计算 三、结果分析 1、不同算法结果对比 2、与互联网AOI对比 3、与天地图测面对比 四、总结 前言 在现代地理信息系统&#xff08;G…...

新建一个reactnative 0.72.0的项目

npx react-native0.72.0 init ProjectName --version 0.72.0 下面是初始化&#xff0c;并且添加了对应路由的库依赖&#xff0c;Android项目能run起来的版本号 { "name": "ProjectName", "version": "0.0.1", "private&quo…...

计算机网络网络层(下)

一、互联的路由选择协议&#xff08;网络层控制层面内容&#xff09; &#xff08;一&#xff09;有关路由选择协议的几个概念 1.理想的路由算法 &#xff08;1&#xff09;理想路由算法应具备的特点&#xff1a;算法必须正确和完整的&#xff0c;算法在计算上应简单&#x…...

Visual studio 打包方法

1.扩展->搜索“”install“->下载 2.安装&#xff08;安装后重新启动visual studio&#xff09; 3.在已有的解决方案上右键 添加 ** 新建项目 4.在该模板下有三个文件夹 第一个文件夹&#xff08;Application Folder&#xff09;添加 你已有c#的releas 的程序exe 所在…...

ubuntu---100条常用命令

目录 一、文件与目录管理二、系统信息与管理三、用户与权限管理四、网络配置与管理五、软件包管理六、其他常用命令 在 Ubuntu 系统中&#xff0c;掌握常用命令能显著提升操作效率。以下是 100 条常用命令&#xff0c;涵盖文件管理、系统信息、用户权限、网络配置、软件包管理等…...

UI-TARS Desktop:用自然语言操控电脑,AI 重新定义人机交互

在人工智能技术飞速发展的今天,从文本生成到图像识别,AI 的能力边界不断被打破。而字节跳动近期开源的 UI-TARS Desktop,则将这一技术推向了更复杂的交互场景——通过自然语言直接控制计算机界面,实现了图形用户界面(GUI)的智能化自动化。这款工具不仅降低了操作门槛,更…...

Linux精确列出非法 UTF-8 字符的路径或文件名

Docker构建的时候报错:failed to solve: Internal: rpc error: code = Internal desc = grpc: error while marshaling: string field contains invalid UTF-8 1、创建一个test.sh文件 find . -print0 | while IFS= read -r -d file;...

ubuntu部署supabase

安装supabse https://supabase.com/docs/guides/local-development/cli/getting-started?queryGroupsplatform&platformlinux brew install supabase/tap/supabase supabase init supabase start需要使用brewuser进行安装&#xff1a; brew安装参考链接&#xff1a; ht…...

《Effective Python》第1章 Pythonic 思维总结——编写优雅、高效的 Python 代码

《Effective Python》第1章 Pythonic 思维总结——编写优雅、高效的 Python 代码 在编程的世界里&#xff0c;每个语言都有其独特的风格和最佳实践。对于 Python 而言&#xff0c;“Pythonic”已经成为描述遵循 Python 特定风格的代码的代名词。这种风格不仅让代码更易读、更简…...

线代第二章矩阵第八节逆矩阵、解矩阵方程

文章目录 逆矩阵定义推论可逆性质 解矩阵方程 逆矩阵 定义 设A为n阶方阵&#xff0c;若存在n阶方阵B,使ABBAE,那么A就是可逆阵&#xff0c; 只有方阵有资格讨论可逆还是不可逆 若A可逆&#xff0c;逆阵是唯一的 未必所有方阵都可逆&#xff01;&#xff01; 比方说&#…...

Java SE(12)——异常(Exception)

1.概念 在Java中&#xff0c;异常(Exception)是指程序在运行过程中发生的不正常情况 例如&#xff1a; 算数异常(ArithmeticException) 空指针异常(NullPointerException) 数组越界异常(ArrayIndexOutOfBoundsException) 根据上述的异常信息可以看出&#xff1a;每个具体的异…...

力扣算法---总结篇

5.13 数组总结 数组是存放在连续内存空间上的相同类型数据的集合。 数组可以方便的通过下标索引的方式获取到下标对应的数据。 正是因为数组在内存空间的地址是连续的&#xff0c;所以我们在删除或者增添元素的时候&#xff0c;就难免要移动其他元素的地址。 数组的元素是不…...

空指针检测方法

空指针检测有以下几种常见方法&#xff1a; 静态代码分析 工具检测 &#xff1a;利用专业的静态代码分析工具&#xff0c;如 国产的库博静态代码检测工具&#xff08;COBOT&#xff09;、Checkmarx、Fortify、PVS-Studio 等&#xff0c;这些工具可以在不实际运行程序的情况下…...

Kubernetes Horizontal Pod Autosscaler(HPA)核心机制解析

一、HPA设计目标 弹性伸缩&#xff1a;根据实时负载动态调整Pod副本&#xff0c;平衡资源利用率与服务可用性声明式管理&#xff1a;通过目标指标阈值定义扩缩容规则&#xff0c;而非手动干预多云兼容&#xff1a;无缝集成云原生监控体系&#xff0c;支持混合云场景 二、核心…...

现代化QML组件开发教程

现代化QML组件开发教程 目录 QML基础介绍QML项目结构基本组件详解自定义组件开发状态与过渡高级主题最佳实践 QML基础介绍 什么是QML QML (Qt Meta Language) 是一种声明式语言&#xff0c;专为用户界面设计而创建。它是Qt框架的一部分&#xff0c;让开发者能够创建流畅、…...

DeepBook 与 CEX 的不同

如果你曾经使用过像币安或 Coinbase 这样的中心化交易所&#xff08;CEX&#xff09;&#xff0c;你可能已经熟悉了订单簿系统 — — 这是一种撮合买卖双方进行交易的机制。而 DeepBook 是 Sui 上首个完全链上的中央限价订单簿。 那么&#xff0c;是什么让 DeepBook 如此独特&…...

《构建社交应用的安全结界:双框架对接审核API的底层逻辑与实践》

用户生成内容如潮水般涌来。从日常的生活分享&#xff0c;到激烈的观点碰撞&#xff0c;这些内容赋予社交应用活力&#xff0c;也带来管理难题。虚假信息、暴力言论、侵权内容等不良信息&#xff0c;如同潜藏的暗礁&#xff0c;威胁着社交平台的健康生态。内容审核机制&#xf…...

hashicorp vault机密管理系统的国产化替代:安当SMS凭据管理系统,量子安全赋能企业密钥管理

引言&#xff1a;国产化替代浪潮下的密钥管理新机遇 在数字化转型与信息安全自主可控的双重驱动下&#xff0c;企业级密钥管理市场正迎来前所未有的变革。传统海外解决方案如HashiCorp Vault虽功能强大&#xff0c;但在国产化适配、量子安全前瞻性布局等方面逐渐显现局限性。与…...

详解注意力机制

## 1. 引言 注意力机制&#xff08;Attention Mechanism&#xff09;是深度学习领域中的一项关键技术&#xff0c;最初源于人类视觉注意力的启发。在人类视觉系统中&#xff0c;我们能够快速识别图像中的重要区域&#xff0c;同时忽略不相关的部分。注意力机制将这种能力引入到…...

从 Vue3 回望 Vue2:响应式的内核革命

从 Vue3 回望 Vue2 02 | 响应式的内核革命&#xff1a;从 defineProperty 到 Proxy一、Vue2 的响应式系统&#xff1a;defineProperty 的极限边界1.1 基础实现机制1.2 Vue2 的典型痛点❌ 无法侦测新增属性❌ 无法拦截数组索引❌ 深层递归导致性能问题❌ 对象粒度低、不可统一代…...

[Java实战]Spring Boot 3构建 RESTful 风格服务(二十)

[Java实战]Spring Boot 3构建 RESTful 风格服务&#xff08;二十&#xff09; 一. 环境准备 openJDK 17&#xff1a;Spring Boot 3 要求 Java 17 及以上。Spring Boot 3.4.5&#xff1a;使用最新稳定版。Ehcache 3.10&#xff1a;支持 JSR-107 标准&#xff0c;兼容 Spring C…...