探秘Session跨页面传递数据的神奇力量

news2025/2/4 8:59:16

探秘Session跨页面传递数据的神奇力量

  • 前言
  • 一、什么是 Session 会话?
  • 二、如何创建 Session 和获取(id 号,是否为新)
  • 三、Session 域数据的存取
  • 四、Session 生命周期控制
  • 五、Session的销毁
  • 五、浏览器和 Session 之间关联的技术内幕

前言

本博主将用CSDN记录软件开发求学之路上亲身所得与所学的心得与知识,有兴趣的小伙伴可以关注博主!
也许一个人独行,可以走的很快,但是一群人结伴而行,才能走的更远!



一、什么是 Session 会话?

  1. Session 就一个接口(HttpSession)。
  2. Session 就是会话。它是用来维护一个客户端和服务器之间关联的一种技术。
  3. 每个客户端都有自己的一个 Session 会话。
  4. Session 会话中,我们经常用来保存用户登录之后的信息。

二、如何创建 Session 和获取(id 号,是否为新)

如何创建和获取 Session。它们的 API 是一样的。

  1. request.getSession() 第一次调用是:创建 Session 会话
    之后调用都是:获取前面创建好的 Session 会话对象。
  2. isNew()判断到底是不是刚创建出来的(新的)
    true 表示刚创建
    false 表示获取之前创建
  3. 每个会话都有一个身份证号。也就是 ID 值。而且这个 ID 是唯一的。 getId() 得到 Session 的会话 id 值。

三、Session 域数据的存取

/**
* 往 Session 中保存数据
* @param req
* @param resp
* @throws ServletException
* @throws IOException
*/
protected void setAttribute(HttpServletRequest req, HttpServletResponse resp) throws ServletException,
IOException {
req.getSession().setAttribute("key1", "value1");
resp.getWriter().write("已经往 Session 中保存了数据");
}
/**
* 获取 Session 域中的数据
* @param req
* @param resp
* @throws ServletException
* @throws IOException
*/
protected void getAttribute(HttpServletRequest req, HttpServletResponse resp) throws ServletException,
IOException {
Object attribute = req.getSession().getAttribute("key1");
resp.getWriter().write("从 Session 中获取出 key1 的数据是:" + attribute);
}

四、Session 生命周期控制

  1. public void setMaxInactiveInterval(int interval)
    设置 Session 的超时时间(以秒为单位),超过指定的时长,Session 就会被销毁。值为正数的时候,设定 Session 的超时时长。 负数表示永不超时(极少使用)
  2. public int getMaxInactiveInterval()获取 Session 的超时时间
  3. public void invalidate() 让当前 Session 会话马上超时无效。
  4. Session 默认的超时时长是多少!
    Session 默认的超时时间长为 30 分钟。
    因为在 Tomcat 服务器的配置文件 web.xml中默认有以下的配置,它就表示配置了当前 Tomcat 服务器下所有的 Session 超时配置默认时长为:30 分钟。
 <session-config> <session-timeout>30</session-timeout> </session-config>
  1. 如果说。你希望你的 web 工程,默认的 Session 的超时时长为其他时长。你可以在你自己的 web.xml 配置文件中做 以上相同的配置。就可以修改你的 web 工程所有 Seession 的默认超时时长。
<!--表示当前 web 工程。创建出来 的所有 Session 默认是 20 分钟 超时时长--> 
<session-config> 
<session-timeout>20</session-timeout>
 </session-config>
  1. 如果你想只修改个别 Session 的超时时长。就可以使用上面的 API。
    setMaxInactiveInterval(int interval)来进行单独的设 置。
    session.setMaxInactiveInterval(int interval)单独设置超时时长。

Session 超时的概念介绍:
Session的超时是指在一段时间内没有活动或用户不再与服务器进行交互时,会话数据将自动过期失效。在Web开发中,会话是用来跟踪用户在网站上的活动状态的一种机制。当用户登录到网站或应用程序时,服务器会为其创建一个会话,并分配一个唯一的会话ID。该会话ID通常存储在一个名为"session cookie"的小文件中,发送给用户的浏览器。

每当用户与服务器进行交互(例如访问页面,提交表单,或者与应用程序进行交互),服务器都会根据会话ID来识别用户,并根据需要更新会话数据。会话数据可能包括用户登录信息、购物车内容、用户偏好设置等等。

然而,如果用户在一段时间内没有任何活动,服务器会自动将该会话标记为过期。这样做的原因是为了安全和资源管理考虑。如果一个会话保持长时间处于活动状态,这可能会导致资源浪费和安全风险,因为其他人可能可以利用该会话进行非法操作。因此,通过设置会话超时时间,可以确保闲置会话在一段时间后自动关闭,从而降低风险并释放服务器资源。

会话超时时间可以根据具体的应用场景和安全需求进行配置。通常,银行或其他敏感信息应用可能会设置较短的会话超时时间,以增加安全性。而在一些社交媒体或新闻网站等应用中,可能会设置较长的会话超时时间,以提供更好的用户体验。

总的来说,会话超时是会话管理的重要方面,有助于平衡用户体验和安全性之间的关系。
在这里插入图片描述

  protected void life3(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 先获取Session对象
        HttpSession session = req.getSession();
        // 设置当前Session3秒后超时
        session.setMaxInactiveInterval(3);

        resp.getWriter().write("当前Session已经设置为3秒后超时");
    }

Session 马上被超时示例:

 protected void deleteNow(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 先获取Session对象
        HttpSession session = req.getSession();
        // 让Session会话马上超时
        session.invalidate();

        resp.getWriter().write("Session已经设置为超时(无效)");
    }
 protected void defaultLife(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 获取了Session的默认超时时长
        int maxInactiveInterval = req.getSession().getMaxInactiveInterval();

        resp.getWriter().write("Session的默认超时时长为:" + maxInactiveInterval + " 秒 ");

    }

五、Session的销毁

在计算机科学和网络编程中,"session"一词可以指代多个概念,因此有几种情况可能导致会话(session)销毁。以下是一些常见的情况:

  1. 用户主动注销:当用户选择退出当前会话时,会话会被销毁。这可以在网站或应用程序中通过点击"注销"或"退出"按钮来实现。

  2. 用户关闭浏览器会话:当关闭当前浏览器窗口时,会话(session)通常会被销毁,但这取决于具体的实现方式和配置。
    在大多数情况下,当用户关闭浏览器窗口时,浏览器会自动删除与该会话相关的会话标识符(session ID)和会话数据。这导致服务器上的会话失效并被销毁。当用户再次打开浏览器并访问相同的网站时,将会创建一个新的会话。
    然而,需要注意的是,浏览器的行为可以受到不同因素的影响。例如,浏览器可能提供"恢复会话"的功能,使用户能够重新打开上次关闭的窗口并继续之前的会话。在这种情况下,会话可能不会立即销毁。
    此外,开发人员也可以通过在会话中设置持久性的 cookie 或其他技术来实现会话的跨会话保留。这样,即使关闭浏览器窗口,会话数据仍然可以在下次打开浏览器时恢复。但这不是会话的标准行为,而是开发人员根据需求进行的特定实现。
    因此,总的来说,关闭当前浏览器窗口通常会导致会话被销毁,但具体行为可能会受到浏览器配置、会话管理策略以及开发人员实现的影响。

  3. 会话超时:为了提高安全性,许多系统会设置会话超时时间。如果在一段时间内没有用户活动,会话可能会被销毁。超时时间可以是固定的(例如,30分钟)或根据用户活动动态调整。

  4. 服务器重启或崩溃:如果服务器在会话期间发生重启或崩溃,所有当前活动的会话通常都会被销毁。在服务器重新启动后,用户需要重新建立新的会话。

  5. 并发限制:某些系统可能对同时活动的会话数进行限制。如果达到了最大并发会话数,新的会话请求可能会导致旧的会话被销毁,以便为新会话腾出空间。

  6. 安全性事件:如果系统检测到会话被破坏、会话劫持或其他安全性事件,它可能会立即销毁相关的会话。

五、浏览器和 Session 之间关联的技术内幕

浏览器和Session之间的关联涉及到几个关键技术内幕。在Web开发中,会话(Session)是一种在服务器和浏览器之间跟踪用户状态的机制。以下是浏览器和Session之间关联的技术内幕:

  1. Cookie:Cookie是存储在用户浏览器中的小型文本文件,由服务器通过HTTP响应头发送给浏览器,并在后续的请求中通过HTTP请求头传回给服务器。Cookie通常包含会话ID等信息,用于标识用户的会话状态。服务器可以使用这个会话ID来识别用户,并维护用户的会话数据。

  2. Session ID:当用户首次访问一个使用Session的网站时,服务器会为用户生成一个唯一的Session ID。这个Session ID通常被存储在一个名为"session cookie"的Cookie中,它会随着每个请求发送回服务器,以便服务器能够识别和管理用户的会话状态。

  3. 会话管理:服务器使用会话管理技术来跟踪和管理用户的会话状态。一旦用户通过Cookie提供了Session ID,服务器就可以将该Session ID与会话数据相关联,并在后续的请求中使用该ID来识别用户。

  4. 会话数据:服务器可以将用户特定的数据存储在会话中,如登录状态、购物车内容、用户偏好设置等。这些会话数据在用户与服务器之间的多个请求之间持久存在,从而提供了连续和一致的用户体验。

  5. 会话超时:为了安全和资源管理,会话通常有一个超时机制。服务器可以设置会话的最大时长,在用户一段时间内没有活动时,会话将被标记为过期并自动失效。

总体来说,浏览器和Session之间的关联是通过Cookie技术实现的。Cookie中存储的Session ID允许服务器识别用户,并跟踪和管理用户的会话状态。这样,服务器可以为每个用户提供个性化和连续的服务,而不需要每次都重新验证身份或重复操作。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/761947.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

自定义类型详解(结构体、枚举、联合)

目录 一、结构体 1.1结构体的认识&#xff1a; 1.2结构体的声明 1.先声明结构体类型&#xff0c;再定义该类型的变量 2.在声明类型的同时定义 1.3结构体的特殊声明 1.4结构体的自引用 1.5结构体的初始化和访问 1.6结构体内存对齐 1.7修改默认对齐数 1.8结构体传参 二…

驱动程序和应用程序

驱动程序和应用程序 一、应用程序和驱动程序如何关联起来的 1、文件描述符fp 与 struct file 应用程序&#xff08;APP&#xff09;在打开文件时&#xff0c;可以得到一个整数&#xff0c;这个整数被称为文件句柄。对于 APP 的每一个文件句柄&#xff0c;在内核里面都有一个…

AI辅助瞄准系统开发与实战(三)-竣工

文章目录 前言GUI功能整合提示框功能整合 总体代码自定义线程池YoloDectect工具类窗口绘制鼠标控制控制器GUI界面 总结 前言 okey&#xff0c;大概经过&#xff0c;两天的开发&#xff0c;我在这里完成了基本的全部开发。 那么我们先来看看大概的效果吧&#xff1a; 在这里的…

Vue3通透教程【十八】TS为组件的props标注类型

文章目录 &#x1f31f; 写在前面&#x1f31f; 回顾defineProps的基础写法&#x1f31f; defineProps的TS写法&#x1f31f; withDefaults方法&#x1f31f; 拓展&#x1f31f; 写在最后 &#x1f31f; 写在前面 专栏介绍&#xff1a; 凉哥作为 Vue 的忠实 粉丝输出过大量的 …

解决 Error:java: Compilation failed: internal java compiler error

编译失败 因为maven工程项目的 多个model 模块的jdk版本不同 改成一样的就可以了

mysql进阶 —— 主从复制和读写分离

前言 在这篇文章中荔枝会梳理MySQL中有关主从复制和读写分离的相关知识点&#xff0c;主要包括基本的概念、配置搭建、命令和模式选择等几个方面。MySQL主从复制和读写分离属于MySQL数据库学习中的高阶内容了&#xff0c;大家要和荔枝一起加油学习噢~~~希望能帮助到需要的小伙伴…

【机密计算标准】GB/T 41388-2022 可信执行环境基础安全规范

1 范围 本文件确立了可信执行环境系统整体技术架构&#xff0c;描述了可信执行环境基础要求、可信虚拟化系统、可信操作系统、可信应用与服务管理、跨平台应用中间件等主要内容及其测试评价方法。 2 规范性引用文件 下列文件中的内容通过文中的规范性引用面构成本文件必不…

MFC 基于数据库的管理系统

文章目录 初始化设置菜单 添加数据库类创建数据库配置数据库 全部代码 初始化 创建文件选择基于CListView 初始化数据 public:CListCtrl& m_list;CSQLView::CSQLView() noexcept:m_list(GetListCtrl()) {// TODO: 在此处添加构造代码}void CSQLView::OnInitialUpdate() {C…

RK3588 CPU GPU NPU 定频和性能模式设置方法以及温度监控

一. CPU定频 1. RK3588的cpu是4个A554个A76&#xff0c;分为3组单独管理&#xff0c;节点分别是&#xff1a; /sys/devices/system/cpu/cpufreq/policy0&#xff08;对应四个A55:CPU0-CPU3&#xff09; /sys/devices/system/cpu/cpufreq/policy4&#xff08;对应2个A76:CPU4-…

【Java从0到1学习】01 Java 概述

1. Java概述 Java 是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 面向对象程序设计语言和 Java 平台的总称。由 James Gosling和同事们共同研发&#xff0c;并在 1995 年正式推出。 后来 Sun 公司被 Oracle &#xff08;甲骨文&#xff09;公司收购&#xff0c;Java…

微信小程序基于Promise封装发起网络请求

1.创建一个request.js // 相当于域名 const baseURL ***************; // 暴露一个request函数 export function request(parms) {// 路径拼接const url baseURL parms.url;// 请求体&#xff0c;默认为{}const data parms.data || {};// 请求方式&#xff0c;默认为GETco…

<Babel> 前端语言的巴别塔

Babel中文站点&#xff1a;https://www.babeljs.cn/ Babel外文站点&#xff1a;https://babeljs.io/ 什么是Babel Babel取自人类语言最早的传说&#xff0c;Tower of Babel。 上帝摧毁了巴别塔上说着共同语言的我们&#xff0c;又被Babel重新带了回来。 如果说巴别塔是人们对混…

windows命令行运行mysql

1.运行命令&#xff1a;mysql -u用户名 -p密码 2.创建数据库&#xff1a; create 数据库名称 &#xff1b; 3.use 数据库 4.show tables &#xff1b; 5.创建用户&#xff0c;分配权限 6.退出 ctrlc 7.切换用户

海外app在谷歌和苹果商店中该如何设置关键词

主导应用商店搜索结果的方法就是关键词的设置。我们需要寻找关键词&#xff0c;跟踪关键词排名并监控其应用的性能&#xff0c;这样就能大大的提高应用的可见度。 优先考虑可推动Android或ios应用自然下载量的关键词&#xff0c;使用搜索量指标了解某个关键词在应用商店中的搜…

数字孪生很火嘛?是做什么的?

数字孪生是一种新兴的技术概念&#xff0c;将现实世界与数字世界紧密结合&#xff0c;通过数字化的方式模拟、仿真和预测真实世界的物理实体、过程和系统。它是物理实体与其数字化的虚拟模型之间的一种互联关系&#xff0c;旨在实现对现实世界的全面感知和实时监测。 数字孪生的…

骑行健身,生活和工作压力的避风港

在忙碌的现代生活中&#xff0c;每个人都面临着种种生活压力和工作压力。而自行车运动&#xff0c;正是一种理想的压力释放方式。它不仅能帮助我们保持身体健康&#xff0c;更能丰富我们的生活&#xff0c;让我们在自然中寻找宁静。 首先&#xff0c;骑自行车是一种全身性的运动…

BigTable:一个针对结构化数据的分布式存储系统----论文摘要

目录 摘要 1. 介绍 2. 数据模型 行 列族 时间戳 3. API 4. 所需构件 5. 实现 5.1 Tablet的位置 5.2 Tablet分配 5.3 Tablet服务 5.4 压实&#xff08;Compactions&#xff09; 6. 优化 本地化分组 压缩(compression) 通过缓存提高读操作的性能 Bloom过滤器 C…

2023年7月16日,HashMap

HashMap HashMap存储的是一组无序的键值对。存储时是根据键的哈希码来计算存储的位置&#xff0c;因为对象的哈希码是不确定的&#xff0c;因此HashMap存储的元素是无序的。 Map用于保存具有映射关系的数据&#xff0c;Map里保存着两组数据&#xff1a;key和value&#xff0c;它…

Leetcode-每日一题【2487.从链表中移除节点】

题目 给你一个链表的头节点 head 。 对于列表中的每个节点 node &#xff0c;如果其右侧存在一个具有 严格更大 值的节点&#xff0c;则移除 node 。 返回修改后链表的头节点 head 。 示例 1&#xff1a; 输入&#xff1a;head [5,2,13,3,8]输出&#xff1a;[13,8]解释&…

拒绝被其他域名恶意解析到你的服务器上

拒绝被其他域名恶意解析到你的服务器上 备案问题恶意解析解决方案后记 备案问题 新的一周开始了&#xff0c;又是一个摸鱼的好时候。。。。结果&#xff0c;刚刚坐到工位上&#xff0c;机房客服发来了一个 excel &#xff0c;说。。。你的备案信息没完善。。。 啥&#xff1f…