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实现省市地图绘制,根据数据显示省市天气图标及温度信息
1637 1
|
安全 Java 编译器
JDK21更新内容:字符串模板
JDK21更新内容:字符串模板
|
运维 数据可视化 Cloud Native
什么是低代码(Low-Code)?
什么是低代码?我们为什么需要低代码?低代码会让程序员失业吗?本文总结了低代码领域的基本概念、核心价值与行业现状,带你全面了解低代码。
37122 4
什么是低代码(Low-Code)?
|
数据采集 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文件。此技术可应用于报表生成、发票打印等多种场景。
588 6
Puppeteer自动化:使用JavaScript定制PDF下载
|
架构师 中间件 API
微服务和 SOA 的 6 大核心区别,你都知道吗?
本文详解SOA与微服务的六大区别,帮助更好地理解和应用这两种架构,建议收藏。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
微服务和 SOA 的 6 大核心区别,你都知道吗?
|
缓存 NoSQL Java
Spring Boot中的分布式缓存方案
Spring Boot提供了简便的方式来集成和使用分布式缓存。通过Redis和Memcached等缓存方案,可以显著提升应用的性能和扩展性。合理配置和优化缓存策略,可以有效避免常见的缓存问题,保证系统的稳定性和高效运行。
389 3
|
缓存 Kubernetes 负载均衡
在K8S中,ingress 有何作用?
在K8S中,ingress 有何作用?
|
开发框架 JavaScript 安全
WIndows Server 2016 部署 Web服务(简单篇)
WIndows Server 2016 部署 Web服务(简单篇)
760 2
|
JSON 前端开发 数据格式
关于JWT令牌和过滤器以及拦截器的实现流程
JWT令牌用于验证用户请求合法性,登录时通过Filter或Interceptor校验账号密码,生成JWT并返回给前端保存。请求时,后端通过解析令牌检查其完整性、时效性和合法性。Filter在请求处理前检查是否携带JWT,Interceptor的preHandle方法同样用于此目的。两者选择其一即可,拦截器配置更精确但稍复杂。
|
Linux Windows
路由追踪命令 | tracert | pathping | tracerout | tracepath
路由追踪命令 | tracert | pathping | tracerout | tracepath
1082 0