HttpSession常用方法
1.HttpSession常用方法
是在Java Servlet中用来管理会话状态的重要接口,它提供了一种在多个请求或页面之间存储用户特定信息的方式。以下是一些 HttpSession 常用的方法和用法:
获取会话对象:
HttpSession session = request.getSession();
这会返回当前请求的会话对象。如果客户端之前没有会话,这个方法会创建一个新的会话对象;如果已经有会话,则返回现有的会话对象。
设置和获取会话属性:
// 设置属性
session.setAttribute("username", "john_doe");// 获取属性
String username = (String) session.getAttribute("username");
通过 setAttribute 方法可以将任意类型的对象存储到会话中,通过 getAttribute 方法可以获取之前存储在会话中的对象。
获取会话ID:
// 设置属性
session.setAttribute("username", "john_doe");// 获取属性
String username = (String) session.getAttribute("username");
(1)getId() 方法
返回当前会话的唯一标识符,通常是一个字符串。
判断会话是否新建:
boolean isNew = session.isNew();
(2)isNew() 方法
返回一个布尔值,表示当前会话是否是新创建的。如果是新会话,返回 true;否则返回 false。
设置会话过期时间:
// 设置会话过期时间为30分钟(单位是秒)
session.setMaxInactiveInterval(1800);
setMaxInactiveInterval 方法设置会话的最大非活动时间间隔,即在用户没有活动(没有请求)的情况下会话保持活跃的时间。在超过该时间后,会话将被销毁。
销毁会话:
java
session.invalidate();
invalidate() 方法用于销毁当前会话。一旦会话被销毁,会话中存储的所有属性和数据都将被清除。
获取会话创建时间:
java
long creationTime = session.getCreationTime();
getCreationTime() 方法返回会话的创建时间,以毫秒数表示,即从1970年1月1日0时0分0秒(GMT时间)至会话创建时的毫秒数。
获取最后访问时间:
java
long lastAccessedTime = session.getLastAccessedTime();
getLastAccessedTime() 方法返回会话的最后访问时间,以毫秒数表示,即上次客户端请求时的时间。
这些方法和用法使得开发者可以方便地管理用户的会话状态,存储用户相关的数据,并在需要时执行特定的会话管理操作。
2.session.isNew()
Java Servlet API 中的一个方法,用于判断当前会话(session)是否是新创建的。
在Java Web应用程序中,会话是指客户端(通常是浏览器)与服务器之间一段特定的交互时间,用于跟踪用户的状态和数据。当客户端第一次访问服务器时,会话可能会被创建,这时候 session.isNew() 方法会返回 true。一旦会话已经存在,并且客户端与服务器之间有交互,即使是重新访问页面,该方法也会返回 false。
典型的用法是在Servlet中使用该方法来判断当前请求是否是新会话,从而执行相应的逻辑或初始化工作。
例如,可以这样使用:
java
HttpSession session = request.getSession();
if (session.isNew()) {// 如果是新会话,执行某些初始化操作// 例如设置初始值、记录日志等
} else {// 如果不是新会话,执行其他操作// 例如读取会话中的数据、更新状态等
}
这种方法对于管理用户状态和个性化内容非常有用,因为可以根据会话是否新建来执行不同的逻辑处理。
3.session.getId()
HttpSession 接口中的一个方法,用于获取当前会话的唯一标识符(Session ID)。每个会话在创建时都会被分配一个唯一的标识符,用于标识该会话,通常以字符串形式返回。
在使用 getId() 方法时,可以获取当前会话的唯一标识符,并用于各种会话管理和数据存储操作中。例如,可以将该标识符用于日志记录、跟踪用户活动、或者与其他系统(如数据库)进行关联以识别特定会话。
示例用法如下:
java
HttpSession session = request.getSession();
String sessionId = session.getId();
System.out.println("Session ID: " + sessionId);
此代码段中,通过 session.getId() 获取了当前会话的标识符,并将其打印输出。
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;@WebServlet(value = "/testSession")
public class TestSession extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doPost(req, resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {HttpSession session=req.getSession();System.out.println(session.getId());System.out.println(session.isNew());}
}
操作:Tomcat自动打开浏览器,复制网址,重新开浏览器
原因:Tomcat启动时会先创造session(会话),所以一直是false
执行结果:
4.invalidate()
HttpSession 接口中的一个方法,用于销毁当前会话。调用 invalidate() 方法将会导致当前会话及其所有关联的数据(即会话属性)被立即销毁并移除。
在使用 invalidate() 方法时,会话对象和其关联的数据将被清除,这包括通过 setAttribute() 方法设置的所有会话属性。通常情况下,调用 invalidate() 是为了确保在用户注销或会话超时时清除会话数据,从而释放资源并保持系统的安全性和一致性。
示例用法如下:
HttpSession session = request.getSession();
session.invalidate();
在这个示例中,通过 request.getSession() 获取当前会话对象,然后调用 invalidate() 方法来销毁该会话。一旦会话被销毁,后续对 session 对象的任何操作都将无效,并且之前存储在会话中的数据将不再可用。
需要注意的是,调用 invalidate() 并不会立即将会话从内存中删除,而是在当前请求结束后才会真正执行销毁操作。
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;@WebServlet(value = "/testSession")
public class TestSession extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doPost(req, resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {HttpSession session=req.getSession();System.out.println(session.getMaxInactiveInterval());System.out.println(session.getCreationTime());System.out.println(session.getLastAccessedTime());}
}
相关文章:
HttpSession常用方法
1.HttpSession常用方法 是在Java Servlet中用来管理会话状态的重要接口,它提供了一种在多个请求或页面之间存储用户特定信息的方式。以下是一些 HttpSession 常用的方法和用法: 获取会话对象: HttpSession session request.getSession();…...
【JavaEE初阶】文件操作和IO
目录 🌴认识文件 🚩树型结构组织和目录 🚩文件路径(Path) 🚩 文件分类 🎍Java 中操作文件 🚩 File 概述: 📌属性 📌构造方法 Ὄ…...
存储器芯片的基本原理
目录 1.存储元 1.1栅极电容 1.2双稳态触发器 2.存储单元 3.存储体 4.存储器 5.容量计算 6.寻址 1.存储元 1.1栅极电容 给MOS管一个阈值电压(5v)就能够导电,若是不给那么就是一个绝缘体不会导电。 读出二进制原理: 通常…...
前端实习手记(7):立秋快乐
这周相比上周感觉挺好的哈哈哈,可能只有自己感觉蛮好的,旁边师父忙的飞起了要,不仅赶工作还要回答我乱七八糟的问题(心疼一秒)。这周也是立秋&七夕咯,立秋快乐哇家人们(虽然还是很热嘛&…...
感恩放下,笑对人生,在人生的长河中,每一天都是独特的篇章,或顺心如意,或充满挑战
在人生的长河中,每一天都是独特的篇章,或顺心如意,或充满挑战。然而,无论今日的经历如何,我们都应怀着感恩与放下的心态,因为人生的旅程远不止这短暂的一天,明天依然充满希望,等待我们继续努力前行。 生活,犹如一场变幻莫测的舞台剧,顺心之时,我们仿佛置身于温暖的…...
URLSession之初窥门径
NSURLSession 于 2013 年随 iOS 7 的发布一起面世,苹果将其定位为 NSURLConnection 的替代者。我们使用最广泛的第三方框架如 AFNetworking 和 SDWebImage 的最新版也都已经全面切换至 NSURLSession。 NSURLSession 不仅仅指代同名类 NSURLSession,它还…...
ios创建控制器的3种方法实现页面跳转
ios遵守mvc设计模式,下面介绍创建控制器viewcontroller的几种方法,来实现页面的跳转 1.纯代码创建 // // AppDelegate.m // study2024 // // Created by zhifei zhu on 2024/8/7. //#import "AppDelegate.h" #import "MyViewContro…...
Android逆向题解-boomshakalaka-3-难度5
这个app 是一个cocos游戏,没有用脚本实现,纯c实现。 题目描述:play the game, get the highest score 题目要求是玩游戏得到最高分就可以得到flag,是写到配置文件的,初始flag值看着是base编码的。 核心代码在so里面的ControlLay…...
Linux(Ubuntu 22.04)系统中固定串口
Linux(Ubuntu 22.04)系统中固定串口 文章目录 前言正文查看linux串口信息修改udev固化串口校验是否修改完成 注意 前言 在Linux系统中固定串口(通常指的是串行通信接口,如/dev/ttyS0或/dev/ttyUSB0)的原因有几个方面&…...
LeetCode - 209 - 长度最小的子数组
力扣209题 题目描述:长度最小的子数组 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 子数组 [numsl, numsl1, ..., numsr-1, numsr] ,并返回其长度**。**如果不存在符合条件的子数组&…...
探索空间计算与VR中的手势跟踪新纪元:XHand框架详解
在虚拟现实(VR)和扩展现实(XR)技术日新月异的今天,手势跟踪作为实现沉浸式体验的关键技术之一,正逐步从概念走向成熟。今天,我们将深入探索一个创新的框架——XHand,它以其卓越的性能和先进的技术亮点,为空间计算与VR领域的手势跟踪带来了全新的解决方案。 XHand框架…...
leetcode + 项目复习
上午 Leetcode算法 参考文章——代码随想录 1. KMP 概念 主要应用 字符串匹配 主要思想 根据之前匹配的信息,当发现字符串不匹配时,避免从头开始匹配。 什么是前缀表(next数组、prefix) 是用来回退的,当文本串和…...
树莓派4/5:设置apt、pip、conda首选清华镜像源
一、教程简介 在中国大陆地区,使用清华镜像源可以显著缩短资源下载时间。 本教程介绍如何将清华镜像源设置为树莓派的apt、pip、conda下载的首选项(默认项)。其中,apt和pip为树莓派系统自带,conda则需要安装miniforg…...
NoSQL 之Redis集群模式
目录 案例概述 redis工作模式 主从模式 哨兵模式 redis cluster模式 Redis集群介绍 Redis集群的优势 Redis集群的实现方法 Redis-Cluster数据分片 Redis-Cluster的主从复制模型 Redis集群部署 案例部署 安装redis 检查redis的状态 修改配置文件 重启启动redis服…...
oracle rac
1、app连接oracle rac集群 连接到 Oracle RAC(Real Application Clusters)的多种配置方式 1. 使用 JDBC 连接字符串: 使用 JDBC 连接字符串是连接 Oracle RAC 的常见方式。连接字符串的格式如下: jdbc:oracle:thin:(DESCRIPTION…...
计算机毕业设计Python深度学习房价预测 房价可视化 链家爬虫 房源爬虫 房源可视化 卷积神经网络 大数据毕业设计 机器学习 人工智能 AI
Python深度学习房价预测系统开题报告 一、研究背景与意义 随着城市化进程的加速和房地产市场的不断发展,房价成为影响人们生活质量的重要因素之一。准确预测房价不仅有助于政府制定科学的房地产政策,还能为开发商提供市场参考,同时帮助购房…...
【Linux】学习Linux,需要借助具象化的思维
指令与图形化界面 导读一、命令行与图形化界面二、命令行与图形化界面的发展历程1.2.1 打字机的起源1.2.2 肖尔斯和格利登型打字机1.2.3 鼠标的发明1.2.4 图形化界面(GUI)的发展 三、命令行与图形化之间的联系3.1 图形化界面的人机交互3.2 命令行界面的人…...
R语言贝叶斯方法在生态环境领域技术教程
原文链接:R语言贝叶斯方法在生态环境领域技术教程https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247612056&idx5&snb170122cf5052cc7cb2d858606b9f158&chksmfa82777fcdf5fe69eec092410530e2900c98bcbb84e3d33c823705c948b4db96545bf282747a…...
mojo实现高阶函数(algorithm)
functional 实现高阶函数。 您可以从 algorithm 包导入这些 API。例如: from algorithm import map别名: Static1DTileUnitFunc = fn[Int](Int, /) capturing -> None: Signature of a 1d tiled function that performs some work with a static tile size and an off…...
先进制造aps专题二十四 云平台排产aps的方案设计
云平台排产aps的方案设计 针对对象是有排产需求无需定制的中小型工厂企业 一 网站功能(b/s架构) 1 前端界面 客户登录 排产项目管理 基础数据(产品资料,产品工艺,工作日历,生产资源,工艺能力…...
PHP和Node.js哪个更爽?
先说结论,rust完胜。 php:laravel,swoole,webman,最开始在苏宁的时候写了几年php,当时觉得php真的是世界上最好的语言,因为当初活在舒适圈里,不愿意跳出来,就好比当初活在…...
Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...
Module Federation 和 Native Federation 的比较
前言 Module Federation 是 Webpack 5 引入的微前端架构方案,允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...
leetcodeSQL解题:3564. 季节性销售分析
leetcodeSQL解题:3564. 季节性销售分析 题目: 表:sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...
NFT模式:数字资产确权与链游经济系统构建
NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...
在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?
uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件,用于在原生应用中加载 HTML 页面: 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...
Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?
Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...
Netty从入门到进阶(二)
二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架,用于…...
Spring Boot + MyBatis 集成支付宝支付流程
Spring Boot MyBatis 集成支付宝支付流程 核心流程 商户系统生成订单调用支付宝创建预支付订单用户跳转支付宝完成支付支付宝异步通知支付结果商户处理支付结果更新订单状态支付宝同步跳转回商户页面 代码实现示例(电脑网站支付) 1. 添加依赖 <!…...
