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()方法

目录
相关文章
|
JSON JavaScript 定位技术
vue中使用echarts实现省市地图绘制,根据数据显示省市天气图标及温度信息
vue中使用echarts实现省市地图绘制,根据数据显示省市天气图标及温度信息
1702 1
|
运维 数据可视化 Cloud Native
什么是低代码(Low-Code)?
什么是低代码?我们为什么需要低代码?低代码会让程序员失业吗?本文总结了低代码领域的基本概念、核心价值与行业现状,带你全面了解低代码。
37192 4
什么是低代码(Low-Code)?
|
安全 Java 编译器
JDK21更新内容:字符串模板
JDK21更新内容:字符串模板
|
数据采集 Web App开发 JavaScript
Puppeteer自动化:使用JavaScript定制PDF下载
在现代Web开发中,自动化工具如Puppeteer可显著提升效率并减少重复工作。Puppeteer是一款强大的Node.js库,能够控制无头Chrome或Chromium浏览器,适用于网页快照生成、数据抓取及自动化测试等任务。本文通过示例展示了如何使用Puppeteer自动化生成定制化的PDF文件,并介绍了如何通过配置代理IP、设置user-agent和cookie等技术增强自动化过程的灵活性与稳定性。具体步骤包括安装Puppeteer、配置代理IP、设置user-agent和cookie等,最终生成符合需求的PDF文件。此技术可应用于报表生成、发票打印等多种场景。
629 6
Puppeteer自动化:使用JavaScript定制PDF下载
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‘问题的解决
|
Java API 数据库
Java一分钟之-JPA的懒加载与即时加载
【6月更文挑战第15天】**JPA中的懒加载与即时加载影响应用性能。懒加载推迟关联对象加载,减少初始数据量,但可能导致N+1查询。即时加载则在主实体加载时加载关联数据,适用于急需的情况,但会增加内存使用。选择合适的加载策略,如通过JOIN FETCH优化查询,是性能调优的关键。代码示例展示了`FetchType.LAZY`与`FetchType.EAGER`的使用。**
394 6
|
开发框架 JavaScript 安全
WIndows Server 2016 部署 Web服务(简单篇)
WIndows Server 2016 部署 Web服务(简单篇)
859 2
|
JSON Java API
Spring Boot 整合 springdoc-openapi
Spring Boot 整合 springdoc-openapi
|
Java 测试技术 Spring
|
JavaScript 前端开发
js 删除数组中指定元素——5种方式
js 删除数组中指定元素——5种方式