【JavaWeb】案例二:一次性验证码的校验

简介: 本期主要介绍案例二:一次性验证码的校验

2.1、讲解:session


2.1.1session 的简述


属于保存在服务器端的会话技术。

作用范围:会话范围-------- 浏览器开启----- N 次请求 -----浏览器关闭

作用:保存会话数据。

域对象:

ServletContext:整个项目的所有请求

Session:会话范围中的 N 次请求

Request:某次请求

2.1.2session 的入门案例


入门案例:将数据保存到 session

image.png

2.1.3session 的原理


1session 是一个会话范围的域对象,负责进行信息的共享

2session 针对的是某个浏览器的一次会话(N 次)

image.png

(扩展)

request.getSession() 相当于 request.getSession(true);

1 、 尝试从请求头中获取 cookie ,COOKIE 名称: JSESSIONID

2 、 如果获取不到该 cookie ,创建一个新的 session 对象,并且给浏览器写一个 cookie ,JSESSIONID= 新sessionid

3 、 如果获取到该 cookie ,读取 JSESSIONID 的值,去内存中进行匹配,看哪个 session 的 ID 和cookie 中的值相同。

4 、 如果匹配到,返回对应的老 session 对象。如果匹配不到,创建一个新的 session 对象,并且给浏览器写一个 cookie ,JSESSIONID= 新 sessionid

2.1.4session 的生命周期


域对象:

ServletContext :服务器启动创建,服务器正常关闭销毁。

Session :

创建:第一次调用 getSession() 方法

销毁: 1 、服务器的非正常关闭

服务器正常关闭,数据会被保存在硬盘上,服务器启动会重新加载回来

2 、调用 invalidate() ,就会立即主动销毁 session 对象

3 、 30 分钟未访问 session 对象,

session 对象销毁

Request :创建:接收到任意一个请求;

销毁:这次请求产生了响应

问题:服务器正常运行,浏览器关闭,浏览器关闭瞬间,对应 session 是否会销毁?

2.1.5session 常用 API


image.png

5-2 列举了 HttpSession 接口中的常用方法,这些方法都是用来操作 HttpSession 对象的。演示:

image.png

2.2、流程分析


image.png

2.3、案例代码实现


首先创建了 VerifyCode

修改 login.html

image.png

image.png

image.png

image.png

2.4、案例代码优化


像火车票一样,只起作用一次。

一次性验证码校验。

image.png

相关文章
|
1月前
|
缓存 Java 应用服务中间件
java语言后台管理若依框架-登录提示404-接口异常-系统接口404异常如何处理-登录验证码不显示prod-api/captchaImage 404 (Not Found) 如何处理-解决方案优雅草卓伊凡
java语言后台管理若依框架-登录提示404-接口异常-系统接口404异常如何处理-登录验证码不显示prod-api/captchaImage 404 (Not Found) 如何处理-解决方案优雅草卓伊凡
195 5
|
2月前
|
前端开发 Java 数据库连接
【潜意识Java】深度解读JavaWeb开发在Java学习中的重要性
深度解读JavaWeb开发在Java学习中的重要性
46 4
|
2月前
|
SQL Java 数据库连接
如何用 Java 校验 SQL 语句的合法性?
本文介绍了五种校验 SQL 语句合法性的方案:1) 使用 JDBC API 的 `execute()` 方法,通过捕获异常判断合法性;2) 使用 JSqlParser 库解析 SQL 语句为 Java 对象;3) 使用正则表达式检查 SQL 语句格式;4) 使用 ANTLR 生成 SQL 解析器;5) 使用 Apache Calcite 解析 SQL。每种方法各有优劣,具体选择取决于需求和个人偏好。需要注意的是,这些方法仅能校验语法合法性,无法保证语义正确性,仍需防范 SQL 注入攻击。
|
2月前
|
存储 监控 Java
JAVA线程池有哪些队列? 以及它们的适用场景案例
不同的线程池队列有着各自的特点和适用场景,在实际使用线程池时,需要根据具体的业务需求、系统资源状况以及对任务执行顺序、响应时间等方面的要求,合理选择相应的队列来构建线程池,以实现高效的任务处理。
153 12
|
4月前
|
jenkins Java 测试技术
如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例详细说明
本文介绍了如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例,详细说明了从 Jenkins 安装配置到自动构建、测试和部署的全流程。文中还提供了一个 Jenkinsfile 示例,并分享了实践经验,强调了版本控制、自动化测试等关键点的重要性。
140 3
|
4月前
|
存储 Java 关系型数据库
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践,包括连接创建、分配、复用和释放等操作,并通过电商应用实例展示了如何选择合适的连接池库(如HikariCP)和配置参数,实现高效、稳定的数据库连接管理。
109 2
|
4月前
|
Java 关系型数据库 数据库
面向对象设计原则在Java中的实现与案例分析
【10月更文挑战第25天】本文通过Java语言的具体实现和案例分析,详细介绍了面向对象设计的五大核心原则:单一职责原则、开闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。这些原则帮助开发者构建更加灵活、可维护和可扩展的系统,不仅适用于Java,也适用于其他面向对象编程语言。
75 2
|
5月前
|
Java 数据库
案例一:去掉数据库某列中的所有英文,利用java正则表达式去做,核心:去掉字符串中的英文
这篇文章介绍了如何使用Java正则表达式从数据库某列中去除所有英文字符。
128 15
|
5月前
|
安全 Java
Java多线程通信新解:本文通过生产者-消费者模型案例,深入解析wait()、notify()、notifyAll()方法的实用技巧
【10月更文挑战第20天】Java多线程通信新解:本文通过生产者-消费者模型案例,深入解析wait()、notify()、notifyAll()方法的实用技巧,包括避免在循环外调用wait()、优先使用notifyAll()、确保线程安全及处理InterruptedException等,帮助读者更好地掌握这些方法的应用。
53 1
|
5月前
|
jenkins Java 测试技术
如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例详细说明
【10月更文挑战第8天】本文介绍了如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例,详细说明了从 Jenkins 安装配置到自动构建、测试和部署的全流程。文中还提供了一个 Jenkinsfile 示例,并分享了实践经验,强调了版本控制、自动化测试等关键点的重要性。
75 5