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

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

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

前言

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



一、什么是 Session 会话?

  1. Session 就一个接口(HttpSession)。
  2. Session 就是会话。它是用来维护一个客户端和服务器之间关联的一种技术。
  3. 每个客户端都有自己的一个 Session 会话。
  4. Session 会话中,我们经常用来保存用户登录之后的信息。
  5. 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 生命周期控制

session的生命周期,一般来说,session的生命周期也是受到两个因素的影响:

  • 服务器对于session对象的保存的最大时间的设置。
  • 客户端进程是否关闭。客户端进程关闭,只对客户端自身有影响,对其它封包工具是没有影响的。

服务器对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允许服务器识别用户,并跟踪和管理用户的会话状态。这样,服务器可以为每个用户提供个性化和连续的服务,而不需要每次都重新验证身份或重复操作。

在这里插入图片描述文章来源地址https://uudwc.com/A/0r1kw

原文地址:https://blog.csdn.net/weixin_52533007/article/details/131760395

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请联系站长进行投诉反馈,一经查实,立即删除!

上一篇 2023年08月05日 11:18
Spring-1-透彻理解Spring XML的Bean创建--IOC
下一篇 2023年08月05日 11:25