news 2026/4/19 1:37:39

会话管理_Session

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
会话管理_Session

目录

  • HttpSession概述
  • 原理图
  • 应用场景
  • HttpSession的使用
    • getSession方法的处理逻辑
  • HttpSession的时效性
    • 为什么要设置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

packagecom.baidu.servlet;importjakarta.servlet.ServletException;importjakarta.servlet.annotation.WebServlet;importjakarta.servlet.http.HttpServlet;importjakarta.servlet.http.HttpServletRequest;importjakarta.servlet.http.HttpServletResponse;importjakarta.servlet.http.HttpSession;importjava.io.IOException;@WebServlet("/servlet1")publicclassServlet1extendsHttpServlet{protectedvoidservice(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOException{// 接收请求中username参数Stringusername=req.getParameter("username");// 获得session对象HttpSessionsession=req.getSession();// 先判断请求中有没有一个特殊的cookie key就是JSESSIONID// 如果有// 根据JSESSIONID去找对应的SESSION对象// 找到了// 返回之前的session// 没找到// 创建一个新的session返回,并且向response对象中存放一个JSESSION的cookie// 如果没有// 该方法会创建一个新的session返回,并且向response对象中存放一个JSESSIONID的cookieSystem.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对最大闲置时间进行设定

// 单位是秒session.setMaxInactiveInterval(60);

也可以直接让session失效

session.invalidate();
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 8:16:33

Windows找不到d3dx9_31.dll文件 无法启动游戏软件 彻底修复解决

在使用电脑系统时经常会出现丢失找不到某些文件的情况,由于很多常用软件都是采用 Microsoft Visual Studio 编写的,所以这类软件的运行需要依赖微软Visual C运行库,比如像 QQ、迅雷、Adobe 软件等等,如果没有安装VC运行库或者安装…

作者头像 李华
网站建设 2026/4/18 23:31:49

别再无脑敲 grep 了,我靠这 5 个选项,定位问题速度提升 10 倍

在日常运维工作中,我们几乎每天都在和日志、配置文件、代码片段打交道。 日志动辄几十 GB,配置文件成百上千行,出问题时,时间永远是最宝贵的资源。 很多同事都会用 grep,但90% 的人只会用最基础的 grep “keyword” file。 结果就是: 要么匹配不准 要么结果一大堆 要么漏…

作者头像 李华
网站建设 2026/4/17 19:37:25

手机端AIDE编译器安卓朗读器软件代码

java代码package com.ld.app; /*手机编程王APP & AIDE编译器联合出品官方微信2133688724微信公众号:手机编程APP官网:www.shoujibiancheng.com */import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;import android.speech.…

作者头像 李华
网站建设 2026/4/17 17:07:44

【Linux系统】进程终止、进程等待与进程替换的概念与实现

代码运行完毕,结果正确代码运行完毕,结果不正确代码异常终止(被信号终止了)而进程执行的结果状态,可以用两个数字表示出来,即退出码和终止信号:int exit_code, int exit_signal:当代…

作者头像 李华
网站建设 2026/4/18 7:00:20

第六十三篇-ComfyUI+V100-32G+代码-Z-Image-Turbo

环境 系统:CentOS-7 CPU : E5-2680V4 14核28线程 内存:DDR4 2133 32G * 2 显卡:Tesla V100-32G【PG503】 (水冷) 驱动: 535 CUDA: 12.2 ComfyUI version: 0.4.0 ComfyUI frontend version: 1.34.8系统软件信息 系统信息 OS linux Python Vers…

作者头像 李华
网站建设 2026/4/18 12:39:45

谷歌浏览器关闭强制 http 跳转成 https

1、打开谷歌浏览器,⚠️一定得是谷歌浏览器,输入 chrome://net-internals/#hsts 然后跳转到一个页面在Query HSTS/PKP domain 那个 Domain 对话框内输入你想要禁止的网站域名 比如 http://xxx.xx,然后点击query,如果出来如下类似的输出&#…

作者头像 李华