web实操9——session

概念

数据保存在服务器HttpSession对象里。
在这里插入图片描述
session也是域对象,有setAttribute和getAttribute方法

快速入门

在这里插入图片描述

代码

获取session和塞入数据:
在这里插入图片描述
获取session获取数据:
在这里插入图片描述
请求存储:
在这里插入图片描述
请求获取:
在这里插入图片描述
数据正常打印:
在这里插入图片描述

结论

由于浏览器和服务器都没用关闭,所以上面相当于一次会话的两次请求。
这时候把浏览器关闭,再直接访问demo2:
输出null,说明范围确实是在一次会话的:
一次会话中才能用session来共享数据。
在这里插入图片描述

原理分析

在这里插入图片描述
竟然共享数据,那么两次请求获取的肯定是同一个session。
那服务器是怎么确保这两个session是同一个的?
在这里插入图片描述
!!!session是依赖于cookie的,cookie是通过请求头和响应头来实现的。
1)第一次获取session,没有cookie会在内存中创建一个新的session对象,并且这个session对象有一个唯一的id值
2)给浏览器做响应的时候会发送一个响应头set-cookie:值是JSSONID=上面的session的Id。
3)浏览器收到cookie头会把cookie信息存储到浏览器内部。
4)下一次再访问当前项目里的其他资源的时候会携带这个cookie头,通过请求头cookie,值:JSSONID=session的Id值。
5)服务器自动去获取这个cookie信息,然后根据cookie信息去查找内存中有没有一个id为带过来的id的session对象。
6)找到了,getSession方法就找到了并返回。

通过抓包看

第一次:
请求头没有请求信息,响应头有响应:
在这里插入图片描述
第二次:
请求头有:
在这里插入图片描述
第一次第二次两个id值是一样的。

细节一

在这里插入图片描述

期望客户端关闭后session也能相同代码

设置一个cookie:
并设置最大存活时间,比如设置成一个小时(60秒*60=1h),那么在这一个小时之内,浏览器不管是否关闭,获取的session都是同一个。
在这里插入图片描述
我们先访问一次:
在这里插入图片描述

第一次访问session对象地址值为:
在这里插入图片描述
浏览器关闭后再次访问:
地址值一样:
在这里插入图片描述

细节二

在这里插入图片描述
浏览器不关闭,浏览器访问一次后,服务器关闭,浏览器再访问一次,两次session地址值一样么:

服务器关了,内存被释放了,session对象在内存里,所以肯定会一同被销毁掉,下次我们打开服务器再创建,两次session的地址值很难一样

两次不一样有什么问题:
虽然对象不是同一个,但是要确保数据不丢失。
钝化:序列化的过程
活化:反序列化的过程
在这里插入图片描述

说明:

tomcat已经帮我们做好钝化和活化的事了,但是idea完成不了钝化和活化的操作,我们需要借用本地的tomcat。

tomcat演示

先把工作空间里的复制到tomcat下面:
在这里插入图片描述
把这个复制一份放桌面然后把里面全部的内容打一个包:
在这里插入图片描述
在这里插入图片描述
改个名字, 直接把.zip扩展名改成.war:
在这里插入图片描述
在这里插入图片描述
然后直接把这个war包复制一份放到tomcat的webapps下:
在这里插入图片描述
然后启动本地的tomcat:
先访问demo1:
在这里插入图片描述
控制台没有任何输出:
在这里插入图片描述
再访问demo2:
在这里插入图片描述
在这里插入图片描述
然后服务器正常关闭掉,看tomcat是否会把session对象序列化到硬盘上:
到work目录下:
work目录下存储的是程序运行中动态生成的数据,包括jsp转换的java文件,session被序列化后的文件。

现在什么都没有:
在这里插入图片描述
然后服务器正常关闭:
在这里插入图片描述
这边自动生成一个:
这里面放的就是session对象。
在这里插入图片描述
然后再服务器启动:
这里自动消失了,他把对象又自动还原到内存中了。
在这里插入图片描述
虽然这时候地址值不一样,但是里面内容sessionid值都是一样的。
访问demo2:
依然可以拿到里面的数据:
在这里插入图片描述

说明

idea只能钝化不能活化,没关系,因为将来部署项目不会在idea本地部署,都是在tomcat服务器里。

细节三——session的失效时间

在这里插入图片描述

解释说明

2)httpSession中session自杀的方法:
一调用session就自己杀掉了自己。
在这里插入图片描述
3)比如打开一个网站,登陆了,登录30分钟之内没做任何操作,这时候session会失效,会提示你重新登录。session如果30分钟内不活动就会被服务器自动删除掉。
但是可以在tomcat里选择性配置的:
web.xml是所有项目的父配置文件:
在这里插入图片描述
打开,搜一下session的配置:
可以修改想要的时间。
在这里插入图片描述

session的特点

在这里插入图片描述
1)存的值是object,所以可以存任何类型。而且session没有大小的限制,想存多大存多大,只要你内存放得下。
在这里插入图片描述
2)重定向是一次会话中两次请求,两次请求之间我们要共享数据,可以使用session也可以使用applicationContext,但是使用context范围太大了,所以session是我们经常采用的共享一次会话的数据。
3)session一般存的数据比较大,session翻译过来是主菜的意思,cookie是小饼干,所以从他们体量来说session也比较大一点。

案例——验证码

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何在电脑上使用 FaceTime

如今,视频通话已成为与朋友、家人和同事保持联系的重要组成部分。 FaceTime 是 Apple 推出的一款功能丰富的视频通话应用程序。它以其简单性和视频质量而闻名。但如果您想在 PC 上使用 FaceTime该怎么办?虽然 FaceTime 仅适用于 Apple 设备,但…

(框架漏洞)

1.Thinkphp 1.Thinkphp5x远程命令执⾏及getshell 搭建靶场环境 vulhub/thinkphp/5-rce docker-compose up -d #启动环境 ?sindex/think\app/invokefunction&functioncall_user_func_array&vars[0]system&vars[1][]whoami ?s/Index/\think\app/invokefunctio…

探秘Kafka源码:关键内容解析

文章目录 一、以kafka-3.0.0为例1.1安装 gradle 二、生产者源码2.1源码主流程图2.2 初始化2.3生产者sender线程初始化2.4 程序入口2.5生产者 main 线程初始化2.6 跳转到 KafkaProducer构造方法 一、以kafka-3.0.0为例 打开 IDEA,点击 File->Open…->源码包解…

动态库dll与静态库lib编程4:MFC规则DLL讲解

文章目录 前言一、说明二、具体实现2.1新建项目2.2 模块切换的演示 总结 前言 动态库dll与静态库lib编程4:MFC规则DLL讲解。 一、说明 1.前面介绍的均为Win32DLL,即不使用MFC的DLL。 2.MFC规则DLL的特点:DLL内部可以使用MFC类库、可以被其他…

对比学习损失函数 - InfoNCE

InfoNCE Loss :构建高效对比学习模型 引言 对比学习中的InfoNCE损失函数是自监督学习领域的重要进展,它通过最大化正样本对之间的相似度并最小化负样本对的相似度,有效地引导模型学习到数据的本质特征。InfoNCE不仅提高了表示学习的质量&am…

家用万兆网络实践:紧凑型家用服务器静音化改造(二)

大家好,这篇文章我们继续分享家里网络设备的万兆升级和静音改造经验,希望对有类似需求的朋友有所帮助。 写在前面 在上一篇《家用网络升级实践:低成本实现局部万兆(一)》中,我们留下了一些待解决的问题。…

【STC库函数】Compare比较器的使用

如果我们需要比较两个点的电压,当A点高于B点的时候我们做一个操作,当B点高于A点的时候做另一个操作。 我们除了加一个运放或者比较器,还可以直接使用STC内部的一个比较器。 正极输入端可以是P37、P50、P51,或者从ADC的十六个通道…

东京大学联合Adobe提出基于指令的图像编辑模型InstructMove,可通过观察视频中的动作来实现基于指令的图像编辑。

东京大学联合Adobe提出的InstructMove是一种基于指令的图像编辑模型,使用多模态 LLM 生成的指令对视频中的帧对进行训练。该模型擅长非刚性编辑,例如调整主体姿势、表情和改变视点,同时保持内容一致性。此外,该方法通过集成蒙版、…

海思Linux(一)-Hi3516CV610的开发-ubuntu22_04环境创建

目 录 前 言 一、芯片介绍 二、环境搭建 2.1 前提准备 2.2 虚拟机创建 2.3 ubuntu环境安装 2.4 基础ubuntu环境搭建 2.5 使用MobaXterm登陆ubuntu 前 言 芯片选型:HI3516CV610 选择的开发板是:酷电科技馆的Hi3516CV610-MINI开发板 上一篇文章&#xf…

vue elementUI Plus实现拖拽流程图,不引入插件,纯手写实现。

vue elementUI Plus实现拖拽流程图,不引入插件,纯手写实现。 1.设计思路:2.设计细节3.详细代码实现 1.设计思路: 左侧button列表是要拖拽的组件。中间是拖拽后的流程图。右侧是拖拽后的数据列表。 我们拖动左侧组件放入中间的流…

Spring boot 项目 Spring 注入 代理 并支持 代理对象使用 @Autowired 去调用其他服务

文章目录 类定义与依赖注入方法解析createCglibProxy注意事项setApplicationContext 方法createCglibProxy 方法 类定义与依赖注入 Service: 标识这是一个 Spring 管理的服务类。ApplicationContextAware: 实现该接口允许你在类中获取 ApplicationContext 对象,从而…

应用程序越权漏洞安全测试总结体会

应用程序越权漏洞安全测试总结体会 一、 越权漏洞简介 越权漏洞顾名思议超越了自身的权限去访问一些资源,在OWASP TOP10 2021中归类为A01:Broken Access Control,其本质原因为对访问用户的权限未进行校验或者校验不严谨。在一个特定的系统或…

JAVA:Spring Boot 集成 Quartz 实现分布式任务的技术指南

1、简述 Quartz 是一个强大的任务调度框架,允许开发者在应用程序中定义和执行定时任务。在 Spring Boot 中集成 Quartz,可以轻松实现任务的调度、管理、暂停和恢复等功能。在分布式系统中,Quartz 也支持集群化的任务调度,确保任务…

改善 Kibana 中的 ES|QL 编辑器体验

作者:来自 Elastic Marco Liberati 随着新的 ES|QL 语言正式发布,Kibana 中开发了一种新的编辑器体验,以帮助用户编写更快、更好的查询。实时验证、改进的自动完成和快速修复等功能将简化 ES|QL 体验。 我们将介绍改进 Kibana 中 ES|QL 编辑器…

【深度学习入门_基础篇】线性代数本质

开坑本部分主要为基础知识复习,新开坑中,学习记录自用。 学习目标: 熟悉向量、线性组合、线性变换、基变换、矩阵运算、逆函数、秩、列空间、零空间、范式、特征指、特征向量等含义与应用。 强烈推荐此视频: 【官方双语/合集】…

【SpringBoot】当 @PathVariable 遇到 /,如何处理

1. 问题复现 在解析一个 URL 时,我们经常会使用 PathVariable 这个注解。例如我们会经常见到如下风格的代码: RestController Slf4j public class HelloWorldController {RequestMapping(path "/hi1/{name}", method RequestMethod.GET)publ…

VBA(Visual Basic for Applications)编程|excel|一系列网址或文件路径快速转换为可点击的超链接

很多时候,我们需要把导入的数据某一列转换成超链接,比如URL形式的列。 那么,大批量的情况下,无疑一个个手动点击是非常愚蠢的办法,这个时候我们就需要VBA编程来编写宏,通过编写宏来简化这些手动操作并不现…

小程序开发全解析 快速构建高效应用的核心指南

内容概要 小程序开发是当前数字世界中炙手可热的领域,吸引了无数开发者和企业的关注。随着技术的进步,小程序成为了提升用户体验、增强品牌曝光以及增加客户互动的重要工具。了解小程序的基本概念,就像是打开了一扇通往新世界的大门。 在这…

SQL—Group_Concat函数用法详解

SQL—Group_Concat函数用法详解 在LC遇见的一道很有趣的SQL题,有用到这个函数,就借这道题抛砖引玉,在此讲解一下group_concat函数的用法。🤣 GROUP_CONCAT([DISTINCT] expression [ORDER BY expression] [SEPARATOR separator])…

Edge Scdn的应用场景有哪些?

酷盾安全Edge Scdn 具备强大的安全防护能力,通过多层防御机制,如防火墙、DDoS 攻击防护、入侵检测和防御、数据加密等,有效抵御各种网络攻击,包括 DDoS 攻击、CC 攻击、SQL 注入攻击、XSS 跨站脚本攻击等,保障网站和应…