Web保存状态的手段(Session的使用)
一,JSP中的page指令
1. <%@ page language=“java” session=“true”%>
- session:此页面是否使用session,默认值为true
二,使用Session完善之前的登录程序
1. 如何禁止直接输入URL地址进入登录功能的欢迎界面?
首先,我们需要创建一个登录Servlet,用于处理用户的登录请求,并在用户成功登录后设置Session:
package com.haina.web;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;@WebServlet("/check")
public class CheckServlet extends HttpServlet {@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String u = req.getParameter("userName");String s = req.getParameter("password");String auto=req.getParameter("autoLogin");Map<String,String>map=new HashMap<>();map.put("admin","123");map.put("test","456");map.put("abc","xyz");//通过用户名,去map中查找密码,如果用户名存在,则可以找到,否则为空String x=map.get(u);//Set<String> k=map.keySet();if (x!=null&&x.equals(s)/*k.contains(u) && map.get(k).equals(s)*/) {//auto!=null表示勾选了自动登录if (auto!=null){//我们使用login作为cookie的键,用这个cookie来实现自动登录Cookie c=new Cookie("login",u);c.setMaxAge(60);resp.addCookie(c);}//从请求对象获取session对象HttpSession session = req.getSession();//把当前登录的用户名存放在session,key是abcsession.setAttribute("abc",u);//如果要实现退出登录功能,可以使用removeAttribute,删除登陆时存放的session数量//session.removeAttribute();//跳转到成功页面//只有第一个参数前面有问号,后续的都是&符号// eg:?name=&age=20&gender=trueresp.sendRedirect("welcome.jsp?name="+u);}/*else if("test".equals(u)&&"456".equals(s)){resp.sendRedirect("welcome.jsp?name="+u);}else if ("abc".equals(u)&&"xyz".equals(s)){resp.sendRedirect("welcome.jsp?name="+u);}*/else {//跳回到登陆页面resp.sendRedirect("login2.jsp");}}
}
然后,在需要保护的页面(例如welcome.jsp)中,我们在页面顶部添加以下代码,以检查用户是否已经登录:
<%--Created by IntelliJ IDEA.User: ***Date: 2024/7/18Time: 17:03To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>欢迎页面</title>
</head>
<body><%Object o=session.getAttribute("abc");if (o==null){//未登录禁止访问登陆页面,直接跳转回登陆页面response.sendRedirect("login2.jsp");}
%>
<h1>登陆成功,欢迎:<%=request.getParameter("name")%>
</h1></body>
</html>
在这个例子中,我们首先获取当前的Session对象(如果用户没有登录,则Session对象为null)。然后,我们检查Session对象中是否存在名为“username”的属性。如果不存在,我们将用户重定向到登录页面。
2.Login流程图
3.Check流程图
三,Session
1. session:保存在服务器端的内存中,以“key-value”对的形式保存数据,与客户端相关。
2. 客户端支持Cookie
- 在服务器端创建session,把SessionID保存在客户端内存中
3. 接口HttpServletRequest中处理session的方法:
- HttpSession getSession(boolean isNew)
- 如果session已经存在,则返回一个HttpSession对象,如果不存在并且isNew为true,则会新建一个HttpSession对象
4. HttpSession接口的常用方法
- void setAttribute(String name,Object value)
- 绑定一个session的对象
- Object getAttribute(String name)
- 返回session,如果没有返回null
- long getCreateTime()
- 返回session的创建时间
- String getId()
- 返回session的id
- void invalidate()
- 销毁当前session
- void removeAttribute(String name)
- 销毁指定的session内容
相关文章:

Web保存状态的手段(Session的使用)
一,JSP中的page指令 1. <% page language“java” session“true”%> session:此页面是否使用session,默认值为true 二,使用Session完善之前的登录程序 1. 如何禁止直接输入URL地址进入登录功能的欢迎界面? …...
第五十四章 安全元素的详细信息 - DerivedKeyToken 详情
文章目录 第五十四章 安全元素的详细信息 - <DerivedKeyToken> 详情详情消息中的位置 第五十四章 安全元素的详细信息 - 详情 <DerivedKeyToken> 的目的是携带发送者和接收者可以独立使用的信息来生成相同的对称密钥。这些方可以使用该对称密钥对 SOAP 消息的相关…...

kafka 的高可用机制是什么?
大家好,我是锋哥。今天分享关于【kafka 的高可用机制是什么?】面试题?希望对大家有帮助; kafka 的高可用机制是什么? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Apache Kafka 是一个分布式消息系统&am…...

4.1.3 网站通信技术
文章目录 1. 网站通信方式2. URL - 统一资源定位符定义格式演示 3. 发送请求的4种形式在地址栏中输入URL访问超链接href属性指定URLform表单在action中指定URL通过AJAX请求后端数据 4. 两种不同返回的请求发送URL,后端处理完响应页面发送AJAX请求,后端处…...

Java-图书管理系统
我的个人主页 欢迎来到我的Java图书管理系统,接下来让我们一同探索如何书写图书管理系统吧! 1管理端和用户端 2建立相关的三个包(book、operation、user) 3建立程序入口Main类 4程序运行 1.首先图书馆管理系统分为管理员端和…...
python如何通过json以及pickle读写保存数据
记录信息 比如说我写了这样一段程序,记录了爱吃的食物: food_list []while True:c input("输入1添加新的食物,输入2查询已添加的食物,输入exit退出:")if c "1":new_food input("输入你…...

【SPIE出版,EI检索稳定】2024年人机交互与虚拟现实国际会议(HCIVR 2024,11月15-17日)
2024年人机交互与虚拟现实国际会议(HCIVR 2024) 2024 International Conference on Human-Computer Interaction and Virtual Reality 官方信息 会议官网:www.hcivr.org 2024 International Conference on Human-Computer Interaction and …...

Linux vim编辑器
前言: 首先我们来了解一下什么是编辑器,通常我们在widow系统下例如C/C我们进行写代码时,我们通过vs2022等等编译器进行,这里的编译器是一种IDE(集成开发环境),集成开发环境是将代码编辑器、编译…...

普推知产:申请商标名称从4字改成3字下了初审!
近日7月的时候普推知产老杨帮客户申请的水果猕猴桃31类商标,初步审定公告下来了,基本没什么问题三个月公告结束后一个月内就可以拿到商标注册证,客户所在地全国有名猕猴桃之县,同质化竞争还得需要商标才可以。 刚开始了解到这位做…...
Flink 状态精准一次性特性
Flink 的一个重大价值在于, 它既保证了 exactly-once ,也具有低延迟和高吞吐 的处理能力 。 1.端到端(End-To-End)状态一致性 端到端的一致性保证,意味着结果的正确性贯穿了整个流处理应用的始终;每 一…...

算法笔记day08
1.游游的水果大礼包 这道题很容易让人想到贪心,但是其实是一道枚举题,只需举一个反例,贪心无非就是哪个礼包价值大,就优先组成哪个礼包。 算法思路: 设可以组成x个a礼包,y个b礼包,求ax by的最…...
在Selenium中有哪些元素对象操作方法?( ̄﹃ ̄)
在Selenium中,driver.find_element() 方法用于定位页面上的单个元素。一旦你定位到了一个元素,你可以对这个元素执行多种操作。此外,driver.find_element() 只是定位元素的方法之一,它还有其他一些相关的方法和属性,但…...

sqli-labs靶场安装以及刷题记录-docker
sqli-labs靶场安装以及刷题记录-docker sqli-labs靶场安装-dockersqli-labs靶场刷题less-1 单引号less-2 数字型less-3 单引号括号less-4 双引号括号less-5 单引号布尔盲注less-6 双引号布尔盲注less-7 单引号加括号、输出到文件less-8 单引号布尔盲注less-9 单引号时间盲注les…...
谷歌仓库管理工具repo
Google 的仓库管理工具 Repo 是一个用于管理包含多个 Git 仓库的大型项目的命令行工具。它最初由 Google 为 Android 操作系统开发,以简化和协调众多子项目的版本控制和协作过程。以下是对 Repo 的详细解释: 主要功能与特点 多仓库管理: Rep…...

C#的自定义Tip窗体 - 开源研究系列文章
上次编写了自定义的提示和对话框窗体,这次记录的是自定义的Tip窗体,用于显示提示操作。有时间没编程了,这次就当进行了记录。 1、 项目目录; 2、 源码介绍; 1) 实现; 2) 应用; 3、 运行界面&…...

目前最新 Reflector V11.1.0.2067版本 .NET 反编译软件
目前最新 Reflector V11.1.0.2067版本 .NET 反编译软件 一、简介二、.NET Reflector的主要功能包括:1. **反编译**: 反编译是将已编译的.NET程序集(如.dll或.exe文件)转换回可读的源代码。这使得开发者可以查看和学习第三方库的实现细节&…...

软考:CORBA架构
CORBA过时了吗 CORBA指南 个人小结: IPC,进程间通信,Socket应用在不同机器之间的通信 RPC是一种技术思想而非一种规范 但站在八九十年代的当口,简单来说,就是我在本地调用了一个函数,或者对象的方法&…...

qt QSaveFile详解
QSaveFile 是 Qt 提供的一个类,用于安全地保存文件。它的主要特点是在写入文件时确保数据完整性,以防止文件损坏。使用 QSaveFile,您可以创建一个临时文件,并在成功写入后将其重命名为目标文件,这样可以避免在写入过程…...

【Linux】线程池详解及其基本架构与单例模式实现
目录 1.关于线程池的基本理论 1.1.线程池是什么? 1.2.线程池的应用场景: 2.线程池的基本架构 2.1.线程容器 2.2.任务队列 2.3.线程函数(HandlerTask) 2.4.线程唤醒机制 3.添加单例模式 3.1.单例模式是什么&…...
运输层知识点汇总3
目录 前言 二、为什么在TCP首部中有一个首部长度字段,而UDP的首部就没有这个字段? 三、一个TCP报文段的数据部分最多为多少字节?为什么?如果用户要传送的数据的字节长度超过TCP报文段中的序号字段可能编出的最大序号࿰…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...

【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...

工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...

基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...
【解密LSTM、GRU如何解决传统RNN梯度消失问题】
解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...

自然语言处理——Transformer
自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...