Session基本使用及原理和使用细节

简介: Session基本使用及原理和使用细节

一、Session基本使用

服务端会话跟踪技术:将数据保存到服务端


JavaEE提供HttpSession接口,来实现一次会话的多次请求间数据共享功能

ea42ea43c4ef4252a1da9e64f3ef2c35.png

使用:


1、获取Session对象

HttpSession session = request.getSession();

2、Session对象功能:


void setAttribute(String name,Object o):存储数据到session域中

Object getAttribute(String name):根据key,获取值

void removeAttribute(String name):根据key,删除该键值对


代码示例:


ServletDemo1:

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
@WebServlet("/demo1")
public class ServletDemo1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //存储到Session中
        //1.获取Session对象
        HttpSession session = request.getSession();
        //2.存储数据
        session.setAttribute("username","zs");
    }
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }
}

ServletDemo2:

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
@WebServlet("/demo2")
public class ServletDemo2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取数据,从session中
        //1.获取Session对象
        HttpSession session = request.getSession();
        //2.获取数据
        Object username = session.getAttribute("username");
        System.out.println(username);
    }
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }
}

访问demo1及demo2时控制台输出:

909b6a3e6cff49f790a080effe8754ca.png

二、Session原理

Session是基于Cookie实现的


8ac878d8094741ef9b0d3633f28cd778.png

关闭浏览器后重新访问demo1的浏览器开发者工具显示:

713340ceb9c04fe4bdfffa7d76b17ede.png

重新访问demo2的浏览器开发者工具显示:

7935426aab914e3f89f91cb6e72fffbc.png

三、Session使用细节

0f7ab606fb1b4d51a0ffe483defc4918.png

Session钝化、活化:


钝化:在服务器正常关闭后,Tomcat会自动将Session数据写入硬盘的文件中

活化:再次启动服务器后,从文件中加载数据到Session中


Session销毁:


默认情况下,无操作,30分钟自动销毁

<session=config>
    <session-timeout>30</session-timeout>
</session-config>

调用Session对象的invalidate()方法

目录
相关文章
|
安全 Java 编译器
JDK21更新内容:字符串模板
JDK21更新内容:字符串模板
|
SQL 算法 开发者
Qoder Next:智能预测编码意图,精准化解开发难题
阿里巴巴旗下的智能编码平台 Qoder 正式发布其全新品牌 NEXT,并推出了基于自研 NEXT 模型的高阶智能补全能力 。 这一发布不仅仅是产品版本的更迭,它标志着 AI 辅助编程正式从“代码续写”阶段迈向“意图感知与自主代理”的 Agentic 编码新纪元 。 Qoder NEXT 通过结合抽象语法树(AST)精准模拟、ActionRL 强化学习算法以及海量真实编辑行为的学习,构建了一个能够主动感知代码库、理解开发者编辑历史的深度认知模型 。
678 10
Qoder Next:智能预测编码意图,精准化解开发难题
springboot 集成 swagger 2.x 和 3.0 以及 Failed to start bean ‘documentationPluginsBootstrapper‘问题的解决
本文介绍了如何在Spring Boot项目中集成Swagger 2.x和3.0版本,并提供了解决Swagger在Spring Boot中启动失败问题“Failed to start bean ‘documentationPluginsBootstrapper’; nested exception is java.lang.NullPointerEx”的方法,包括配置yml文件和Spring Boot版本的降级。
springboot 集成 swagger 2.x 和 3.0 以及 Failed to start bean ‘documentationPluginsBootstrapper‘问题的解决
|
前端开发 计算机视觉 Python
flask+python 实时视频流输出到前台
该文章介绍了如何使用Flask和Python实现实时视频流输出到网页前端,包括后端通过OpenCV捕获摄像头视频流、处理并编码为JPEG格式,然后以HTTP响应的形式发送给前端显示的完整示例代码和运行效果。
flask+python 实时视频流输出到前台
|
Java 数据库连接 mybatis
flowable项目启动项目报错:Consider defining a bean of type ‘org.mybatis.spring.SqlSessionTemplate‘ in ……
flowable项目启动项目报错:Consider defining a bean of type ‘org.mybatis.spring.SqlSessionTemplate‘ in ……
677 0
|
Java API 数据库
Java一分钟之-JPA的懒加载与即时加载
【6月更文挑战第15天】**JPA中的懒加载与即时加载影响应用性能。懒加载推迟关联对象加载,减少初始数据量,但可能导致N+1查询。即时加载则在主实体加载时加载关联数据,适用于急需的情况,但会增加内存使用。选择合适的加载策略,如通过JOIN FETCH优化查询,是性能调优的关键。代码示例展示了`FetchType.LAZY`与`FetchType.EAGER`的使用。**
418 6
|
Java API Maven
bcprov-jdk15on是什么依赖用在哪里
【6月更文挑战第11天】bcprov-jdk15on是什么依赖用在哪里
8253 3
|
开发框架 JavaScript 安全
WIndows Server 2016 部署 Web服务(简单篇)
WIndows Server 2016 部署 Web服务(简单篇)
954 2
|
前端开发 JavaScript 数据可视化
2022年中高级前端需要学习的25种前端技术栈
2022年中高级前端需要学习的25种前端技术栈
418 0
2022年中高级前端需要学习的25种前端技术栈