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());}
}

 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

三十八、大数据技术之Kafka3.x(1)

🌻🌻 目录 一、Kafka 概述1.1 定义1.2 消息队列1.2.1 消息队列内部实现原理1.2.2 传统消息队列的应用场景1.2.3 消息队列的两种模式 1.3 Kafka 基础架构 二、 Kafka 快速入门2.1 安装前的准备2.2 安装部署2.2.1 集群规划2.2.2 单节点或集群部署2.2.3 集群…

浙大数据结构慕课课后题(04-树5 Root of AVL Tree)

题目要求: AVL 树是一种自平衡的二叉搜索树。在 AVL 树中,任何节点的两个子子树的高度最多相差一;如果在任何时候它们相差不止一,则进行重新平衡以恢复此属性。图 1-4 说明了旋转规则。 图1 图2 图3 图4 现在给定一系列插入,您应该…

【经验总结】ShardingSphere5.2.1 + Springboot 分库分表 快速开始

Sharding Sphere 官方文档地址: https://shardingsphere.apache.org/document/current/cn/overview/maven仓库:https://mvnrepository.com/artifact/org.apache.shardingsphere/shardingsphere-jdbc 官方的文档写的很详尽到位,这里会截取部分…

Spring事务管理:程序化 vs 声明式

Spring事务管理:程序化 vs 声明式 1、程序化事务管理2、声明式事务管理3、总结 💖The Begin💖点点关注,收藏不迷路💖 Spring框架为事务管理提供了两种主要方式:程序化事务管理和声明式事务管理。 1、程序化…

【数据结构】六、图:3.十字链表、邻接多重表、边集数组

3.十字链表(有向图) 文章目录 3.十字链表(有向图)3.1性能分析 4.邻接多重表(无向图)4.1性能分析 5.边集数组 十字链表是有向图的一种链式存储结构。 不足 对于有向图来说,邻接表是有缺陷的。了…

Go语言fmt包中print相关方法

Go语言的fmt包提供了多种打印相关的函数,主要用于在控制台或其他输出目标上格式化并输出数据。下面是一些常用的print相关方法的用途和区别: 1.fmt.Print() 功能: fmt.Print() 将参数的内容按默认格式输出到标准输出(通常是控制台&#xff…

【从零开始一步步学习VSOA开发】发布订阅服务端

发布订阅服务端 概念 **发布订阅模式(Publish-Subscribe Pattern)**是一种消息传递模式,其中发布者发布消息,而订阅者接收和处理这些消息。它是一种松耦合的通信方式,允许发布者和订阅者在不知道彼此存在的情况下进行…

【C++】面向对象三大特性之—— 多态(从底层带你理解多态)

目录 前言 什么是多态 多态的定义及实现 虚函数 虚函数的重写 多态的构成条件 虚函数重写的两个例外 协变 析构函数的重写(重要!!!) override 和 final(了解) override final 重载、…

linux 查看端口占用并处理

lsof 命令 lsof -i:端口注意pid netstat 命令 netstat -tnpla | grep 端口注意pid 查看详情 ps -ef | grep 3766607删除 kill -9 PIDkill -9 3766607

【整数规划】+【0—1规划】解决优化类问题(Matlab代码)

目录 文章目录 前言 一、整数规划 分类: 二、典例讲解 1.背包问题 2.指派问题 总结 前言 如果觉得本篇文章还不错的话,给作者点个赞鼓励一下吧😁😁😁 在规划问题中,有些最优解可能是分数或小数&am…

SpringBoot+Vue3+SSE实现实时消息语音播报

目录 1、前言 2、什么是SSE 2.1、与WebSocket有什么异同? 3、代码实现 3.1、前置代码 3.2、SSE相关代码 3.3、消息类相关代码 3.4 、前端代码 4、实机演示 1、前言 有这样一个业务场景,比如有一个后台管理系统,用来监听订单的更新&…

【NUCLEO-G071RB】010——TIM6-基本定时器

NUCLEO-G071RB:010——TIM6-基本定时器 基本定时器设计目标芯片配置程序修改运行测试 基本定时器 基本定时器只能用于计时,可以配置有无上溢出中断,它基本到不支持下溢出中断。它的时钟源(应该)是TPCLK,内…

ChatGPT首次被植入人类大脑:帮助残障人士开启对话

马斯克在脑机接口中最强大的竞争对手Synchron有了新的技术进展,他们首次将ChatGPT整合到其脑机系统中,以使瘫痪患者更容易控制他们的数字设备。Synchron凭借其独特的脑机接口(BCI)技术脱颖而出,该技术巧妙地运用了成熟…

【npm】如何将自己的插件发布到npm上

前言 简单说下 npm 是什么: npm 是一个 node 模块管理工具,也是全球最大的共享源。 npm 工具与 nodejs 配套发布,便利开发人员共享代码。npm 主要包括 npm 官方网站、CLI(控制台命令行工具)、和 registry(…

「Pytorch」BF16 Mixed Precision Training

在深度学习领域,神经网络的训练性能瓶颈常常出现在 GPU显存的使用上。主要表现为两方面: 单卡上可容纳的模型和数据量有限;显存与计算单元之间的带宽和延迟限制了运算速度; 为了解决显卡瓶颈的问题,涌现了不同的解决…

Arduino控制带编码器的直流电机速度

Arduino DC Motor Speed Control with Encoder, Arduino DC Motor Encoder 作者 How to control dc motor with encoder:DC Motor with Encoder Arduino, Circuit Diagram:Driving the Motor with Encoder and Arduino:Control DC motor using Encoder feedback loop: How …

深度学习碎碎念——碎片知识1

1、什么叫模型收敛?什么叫模型欠拟合和过拟合? 什么叫模型收敛?——模型收敛是指在训练过程中,模型的损失函数逐渐减小并且趋于稳定的状态。简而言之,当模型的训练过程达到一个稳定的点,使得进一步的训练不…

CV党福音:YOLOv8实现语义分割(一)

前面我们得知YOLOv8不但可以实现目标检测任务,还包揽了分类、分割、姿态估计等计算机视觉任务。在上一篇博文中,博主已经介绍了YOLOv8如何实现分类,在这篇博文里,博主将介绍其如何将语义分割给收入囊中。 YOLOv8语义分割架构图 …

【C++】特殊类的设计与类型转换

文章目录 1. 特殊类的设计1.1 不能被拷贝的类1.2 只能在堆上创建对象的类1.3 只能在栈上创建对象的类1.4 不能被继承的类1.5 只能创建一个对象的类(单列模式) 2. 类型转换2.1 C/C的类型转换2.2 C规定的四种类型转换2.2.1 static_cast2.2.2 reinterpret_c…

【吊打面试官系列-Elasticsearch面试题】对于 GC 方面,在使用 Elasticsearch 时要注意什么?

大家好,我是锋哥。今天分享关于 【对于 GC 方面,在使用 Elasticsearch 时要注意什么?】面试题,希望对大家有帮助; 对于 GC 方面,在使用 Elasticsearch 时要注意什么? 1、SEE 2、倒排词典的索引需…