会话管理_Session

目录

HttpSession概述

HttpSession是一种保留更多信息在服务端的一种技术,服务器会为每一个客户端开辟一块内存空间,即session对象,客户端在发送请求时,都可以使用自己的session,这样服务端就可以通过session来记录某个客户端的状态了

  1. 服务端在为客户端创建session时,会同时将session对象的id,即JSESSIONID以cookie的形式放入响应对象
  2. 后端创建完session后,客户端会收到一个特殊的cookie,叫做JSESSIONID
  3. 客户端下一次请求时携带JSESSIONID,后端收到后,根据JSESSION找到对应的session对象
  4. 通过该机制,服务端通过session就可以存储一些专门针对某个客户端的信息了
  5. session也是域对象

原理图

应用场景

  1. 记录用户的登录状态
    用户登录后,将用户的账号等敏感信息存入session
  2. 记录用户操作的历史
    例如记录用户的访问痕迹,用户的购物车信息等临时性的信息

HttpSession的使用

getSession方法的处理逻辑

创建servlet1

java 复制代码
package com.baidu.servlet;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;

import java.io.IOException;
@WebServlet("/servlet1")
public class Servlet1 extends HttpServlet {
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//      接收请求中username参数
        String username = req.getParameter("username");

//      获得session对象
        HttpSession session = req.getSession();
//        先判断请求中有没有一个特殊的cookie       key就是JSESSIONID
//        如果有
//               根据JSESSIONID去找对应的SESSION对象
//                      找到了
//                           返回之前的session
//                      没找到
//                            创建一个新的session返回,并且向response对象中存放一个JSESSION的cookie

//        如果没有
//               该方法会创建一个新的session返回,并且向response对象中存放一个JSESSIONID的cookie
        System.out.println(session.getId());
        System.out.println(session.isNew());

        session.setAttribute("username",username);

//        客户端响应信息
        resp.setContentType("text/html;charset=UTF-8");
        resp.getWriter().write("成功");



    }
}

编写servlet2

HttpSession的时效性

为什么要设置session的时效

  • 用户量很大之后,session对象相应的也要创建很多,如果一味创建不释放,那么服务器端的内存迟早要被耗尽
  • 客户端关闭行为无法被服务端直接侦测,或者客户端较长时间不操作也经常出现,类似这种情况,就需要对sesion的时限进行设置了

默认的session最大闲置时间(两次使用同一个session中的间隔时间)

tomcat/conf/web.xml中配置为30分钟

我们也可以自己在当前项目的web.xml对最大闲置时间进行重新设定(设置完后,重新启动Tomcat)

也可以通过HttpSession的API对最大闲置时间进行设定

clike 复制代码
// 单位是秒
session.setMaxInactiveInterval(60);

也可以直接让session失效

clike 复制代码
session.invalidate();
相关推荐
paopaokaka_luck1 分钟前
非遗文物数字化系统(AI非遗问答、ONNX图像识别、协同过滤推荐、ECharts数据分析、非遗知识浏览与互动、文创商城订单闭环、文化活动报名签到、社区交流)
前端·javascript·vue.js·人工智能·数据分析·echarts
mONESY34 分钟前
让大模型「听话」输出 JSON:LangChain OutputParser 结构化输出实战,从手写正则到 Zod Schema 四层进化
javascript
研☆香1 小时前
js中使用的正则表达式
开发语言·javascript·正则表达式
开开心心就好1 小时前
免费桌签打印工具,支持批量导入名字
前端·javascript·人工智能·docker·jupyter·智能手机·语音识别
CappuccinoRose1 小时前
Web Components 基础
前端·javascript·交互·web component·shadow dom
imgsq1 小时前
MapLibre GL JS v6 正式发布:v5 之后八个月的第一个大版本(编译)
开发语言·javascript·ecmascript
lytao1232 小时前
90% 覆盖率不等于没 Bug:用风险配置测试组合
前端·javascript·bug·软件工程
mayaairi2 小时前
Vue2 组件通讯(一):Props传值完全指南
前端·javascript·vue.js
码艺-Alimjan2 小时前
Tauri 2.x + Vue 3 桌面应用开发实战:从踩坑到完美落地
前端·javascript·vue.js·rust·typescript·go
qq_570398572 小时前
Three.js基础使用-案例
开发语言·javascript·ecmascript