【Java Web】会话管理

news2024/11/24 7:45:45

目录

一、为什么需要会话管理?

二、会话管理机制

三、Cookie概述

四、HttpSession概述

4.1 HttpSession时效性


一、为什么需要会话管理?

HTTP协议在设计之初就是无状态的,所谓无状态就是在浏览器和服务器之间的通信过程中,服务器并不会保存记录客户端的一些信息。由于HTTP是无状态的、这样服务器在收到多个用户浏览器发送过来的请求报文时,就无法知道他们分别来自那个用户,这样就导致服务器无法对特定的用户请求做特定的处理。而会话管理的出现(session和cookie)就很好的解决了此问题。

二、会话管理机制

①用户浏览器向服务端发送一次请求;服务端收到用户的请求报文后,根据cookie请求头中保存的会话ID来查找Tomcat服务中对应的session对象,并根据session对象中记录的客户端信息对其用户的请求做相应的处理。

由于客户端是首次访问服务端站点,其发送的请求报文中不会携带cookie。于是服务端在收到请求报文后会为此用户专门创建一个session对象来记录该客户端的一些状态信息。并将该session对象ID放在响应头的cookie中,响应给客户端(session对象就像一个记事本、此记事本专门记录一个客户端的状态信息)。

②客户端浏览器收到响应报文后会将服务端响应的cookie信息保存到浏览器(默认)内存或本地磁盘里;以后客户端每次访问该服务器只要本地保存的cookie还存在,就会在请求报文中携带此cookie发送给服务端。

③Tomcat服务收到用户发送过来的请求报文后,会根据其携带的cookie中的会话ID,来找到之前对应的、记录着客户端状态信息的session对象。这样服务端就可以根据session对象中记录的用户的信息来做相应的逻辑处理并做出响应。

注意:

②服务端根据用户请求头cookie的SessionID,如果没有找到之前的Session对象则会生成一个新的Session对象来使用并将其会话ID放在cookie中响应给用户浏览器。

③默认情况下,Tomcat服务的Session对象的空闲时间也就是超时不活跃时间为30分钟,如果在这30分钟内都没有使用该会话对象,则此对象就会被删除。

三、Cookie概述

Cookie是由服务端产生的,用于存储一小份数据到用户浏览器。以后用户每次请求服务器时都会携带这一小份数据到服务端。

代码测试:

说明:

①cookie默认保存在浏览器所使用的内存中,浏览器关闭或清除浏览器缓存都会导致cookie的删除(会话级Cookie)。服务端也可以通过代码设置响应给客户端的cookie保存到客户端本地的磁盘中做持久化存储即设置保存到客户端的Cookie的生存时间。

②浏览器在访问服务端项目下的任何资源时,默认都会携带Cookie;可以在服务端通过Cookie的setPath(String)方法设置某个Cookie只在访问服务端项目下的特定资源时会被携带浏览器的请求报文中。

 

四、HttpSession概述

HttpSession是位于服务端的一个会话对象,类似于一个记事本专门用来记录客户端的一些信息,服务端会为每个客户端生成一个session对象,对象中可以用来存储键值对类型的数据。每个Session对象都有一个对应的JSessionID,服务端会根据用户请求报文Cookie中携带的JSessionID找到之前的为此客户端创建的seesion对象记事本,从而可以获取之前于客户端交互而记录下来的一些信息。

代码测试:

4.1 HttpSession时效性

默认情况下HttpSession对象的最大生存时间也称为最大不活跃间隔时间是30分钟。如果超过30分钟此session对象都没使用,则Tomcat服务会将其session对象回收释放;如果使用了则会重新对session对象进行计时即刷新计时器。

设置Session对象生存时间的两种方式:

  • web.xml方式:

  • HttpSession对象的API方式:

        //设置最大闲置时间

        session.setMaxInactiveInterval(60);

        //直接让session失效

        session.invalidate();

@声明:“山月润无声”博主知识水平有限,以上文章如有不妥之处,欢迎广大IT爱好者指正,小弟定当虚心受教!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1865576.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

免费录屏软件哪个好?录屏软件,分享3款免费工具

在日常生活或者工作中,录屏软件已经成为我们的得力助手。无论是教学、演示、娱乐,录屏软件都能为我们带来极大的便利。然而,市面上有些录屏软件的价格却十分的昂贵,让人望而却步。那么市面上到底有没有免费的录屏软件?…

MySQL的jdbc、odbc驱动版本必须和MySQL版本一样吗?

MySQL的版本和JDBC,ODBC驱动版本大体一致就可以 比如说MySQL的版本是8.0.35,您可以用8.0.19版本的JDBC,ODBC。或者8.0.31的版本。 除此之外我也查看了其他资料,这个哥们总结的也不错,我把链接放到这里 MySQL JDBC驱动版本与数据…

电脑可以录屏吗?5个方法,珍藏分享

在数字化时代,电脑的录屏功能已经成为许多人工作和学习的必备工具。录屏可以帮助我们捕捉屏幕上的动态内容,记录下重要的瞬间。所以,录屏是一个非常实用的功能。那么,电脑可以录屏吗?答案是肯定的。本文将为您介绍5种电…

一文详细了解Bootloader

Bootloader是什么 bootloader是一个引导加载程序,它的主要作用是初始化硬件设备、设置硬件参数,并加载操作系统内核。在嵌入式系统中,bootloader是硬件启动后第一个被执行的程序,它位于操作系统和硬件之间,起到桥梁的…

加速科技Flash存储测试解决方案 全面保障数据存储可靠性

Flash存储芯片 现代电子设备的核心数据存储守护者 Flash存储芯片是一种关键的非易失性存储器,作为现代电子设备中不可或缺的核心组件,承载着数据的存取重任。这种小巧而强大的芯片,以其低功耗、可靠性、高速的读写能力和巨大的存储容量&…

聊聊AI在企业数字化转型中的作用

随着科技的飞速发展,人工智能(AI)已经深入到我们生活的方方面面,尤其在数字化转型的浪潮中,AI技术更是扮演着举足轻重的角色。数字化转型,简而言之,就是企业利用数字技术来改造其业务运营方式&a…

[AI MoneyPrinterTurbo] 一键成片,超级印钞机

今天,我们将踏上一段关于MoneyPrinterTurbo的探索之旅,这是一个文生视频工具,旨在让视频创作变得轻松而有趣。 故事的开始 想象一下,你只需要提供一个视频主题或关键词,剩下的——视频文案、素材、字幕、背景音乐&am…

转:关于征集第三批工业软件新场景新技术难题解决思路的公告

工业软件是先进工业知识与经验的凝炼,工业软件自身的先进性既来自对先进工业先进需求的汲取提炼,也来自对根技术新突破、新成果的高效采用。为增强根技术新成果提供方与工业软件厂家或最终用户方的连接,促进国产工业软件差异化竞争力的打造&a…

浅学JVM

一、基本概念 目录 一、基本概念 二、JVM 运行时内存 1、新生代 1.1 Eden 区 1.2. ServivorFrom 1.3. ServivorTo 1.4 MinorGC 的过程 (复制- >清空- >互换) 1.4.1:eden 、servicorFrom 复制到ServicorTo,年龄1 …

docker入门配置

1、创建配置镜像 由于国内docker连接外网速度慢,采用代理 vi /etc/docker/daemon.json添加以下内容 {"registry-mirrors": ["https://9cpn8tt6.mirror.aliyuncs.com","https://dockerproxy.com","https://hub-mirror.c.163.co…

用一个暑假|用AlGC-stable diffusion 辅助服装设计及展示,让你在同龄人中脱颖而出!

大家好,我是设计师阿威 Stable Diffusion是一款开源AI绘画工具, 用户输入语言指令,即可自动生成各种风格的绘画图片 Stable Diffusion功能强大,生态完整、使用方便。支持大部分视觉模型上传,且可自己定制模型&#x…

[深度学习] Transformer

Transformer是一种深度学习模型,最早由Vaswani等人在2017年的论文《Attention is All You Need》中提出。它最初用于自然语言处理(NLP)任务,但其架构的灵活性使其在许多其他领域也表现出色,如计算机视觉、时间序列分析…

程序设计语言前言

1.机器语言及特点 2.编译语言及特点 3.高级语言及特点 4.编译和解释 5.IPO编程方式 一、机器语言 机器语言,也被称为二进制代码语言,是计算机硬件能够直接识别的程序语言或指令代码。它是由一系列由0和1组成的二进制指令码构成,每一条指令码…

分页组件 vue/uniapp

失效如上图 1.父组件调用 <onion-pagination :page.sync="todusGameQuery.pageSize" @update:page="changeTodusLoadMore":pageSize="todusGameQuery.pageNum" :total="todusGameTotal"></onion-pagination> 2.组件封装…

ios18开发者预览,Beta 2升级新增镜像等功能

近日&#xff0c;苹果发布了 iOS 18 开发者预览版 Beta 2 升级&#xff0c;为 iPhone 用户带来了多项新功能。据了解&#xff0c;这些新功能包括 iPhone 镜像和 SharePlay 屏幕共享&#xff0c;以及其他新增功能。 据了解&#xff0c;iPhone镜像可以让Mac用户将iPhone屏幕镜像…

flink 处理函数和流转换

目录 处理函数分类 概览介绍 KeydProcessFunction和ProcessFunction 定时器TimeService 窗口处理函数 多流转换 分流-侧输出流 合流 联合&#xff08;Uniion&#xff09; 连接&#xff08;connect&#xff09; 广播连接流&#xff08;BroadcatConnectedStream&#xf…

【计算机毕业设计】基于Springboot的智能物流管理系统【源码+lw+部署文档】

包含论文源码的压缩包较大&#xff0c;请私信或者加我的绿色小软件获取 免责声明&#xff1a;资料部分来源于合法的互联网渠道收集和整理&#xff0c;部分自己学习积累成果&#xff0c;供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者…

JAVA【案例5-5】二月天

【二月天】 1、案例描述 二月是一个有趣的月份&#xff0c;平年的二月有28天&#xff0c;闰年的二月由29天。闰年每四年一次&#xff0c;在判断闰年时&#xff0c;可以使用年份除于4&#xff0c;如果能够整除&#xff0c;则该年是闰年。 本案例要求编写一个程序&#xff0c;…

Docker如何安装redis

目录 1. 拉取redis的镜像文件 2. 创建redis的容器卷 3. 准备reids的配置文件 4. 以配置文件启动redis 1. 拉取redis的镜像文件 # 默认安装最新版本 如果需要指定版本 docker pull redis:版本号 docker pull redis 详细版本请看dockerhub的官网&#xff1a; hub.docker…

【Java面试场景题】如何解决高并发下的库存抢购超卖少买问题?

一、问题解析 我相信很多人都看到过相关资料&#xff0c;但是在实践过程中&#xff0c;仍然会碰到具体的实现无法满足需求的情况&#xff0c;比如说有的实现无法秒杀多个库存&#xff0c;有的实现新增库存操作缓慢&#xff0c;有的实现库存耗尽时会变慢等等。 这是因为对于不…