探秘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来识别用户,并根据需要更新会话数据。会话数据可能包括用户登录信息、购物车内容、用户偏好设置等等。

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

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

总的来说,会话超时是会话管理的重要方面,有助于平衡用户体验和安全性之间的关系。
探秘Session跨页面传递数据的神奇力量,JavaWeb,java,前端,servlet

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

探秘Session跨页面传递数据的神奇力量,JavaWeb,java,前端,servlet文章来源地址https://www.toymoban.com/news/detail-625911.html

到了这里,关于探秘Session跨页面传递数据的神奇力量的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

领支付宝红包 赞助服务器费用

相关文章

  • 借助ChatGPT的神奇力量,解锁AI无限可能!

    🚀欢迎来到本文🚀 🍉个人简介:陈童学哦,目前学习C/C++、算法、Python、Java等方向,一个正在慢慢前行的普通人。 🏀系列专栏:陈童学的日记 💡其他专栏:C++STL,感兴趣的小伙伴可以看看。 🎁希望各位→点赞👍 + 收藏⭐️ + 留言📝 ​ ⛱️万物从心起,心动则万物动🏄

    2024年02月08日
    浏览(31)
  • 探索 Go 语言中 iota 的神奇力量,优雅定义常量!

    大家好!在今天的文章中,我将为大家介绍一下关于 golang 中的 iota 的使用技巧和注意事项。作为一种枚举常量生成器,iota 在 golang 中被广泛使用,可以简化代码和提高可读性。下面就让我们来了解一些关键的使用技巧和注意事项吧! 在 golang 中,iota 是一个预定义标识符,

    2024年02月13日
    浏览(30)
  • 探秘C++中的神奇组合:std--pair的魅力之旅

    在C++编程中,我们常常会遇到需要将两个相关的数据元素组合在一起的情况。为了满足这一需求,C++标准库提供了一个名为std::pair的实用工具,可以将两个数据元素组合成一个对象。std::pair不仅易于使用,而且在实际编程中有着广泛的应用。 本文将详细介绍std::pair的定义、基

    2023年04月16日
    浏览(22)
  • 页面跳转和两个页面之间的数据传递-鸿蒙ArkTS

    本篇文章主要是对两个页面之间数据传递进行实现。 页面跳转和参数接受是通过导入 router 模块实现。 router.pushUrl() 跳转到指定页面。 router.replaceUrl() 替换当前页面并销毁。 router.back() 返回上一个页面。 router.getParams() 获取上一个页面跳转过来携带的参数。 router.clear() 清空当

    2024年02月12日
    浏览(48)
  • 【山河送书第八期】:《用ChatGPT轻松玩转机器学习与深度学习》突破传统学习束缚,借助ChatGPT的神奇力量,解锁AI无限可能!

    随着科技的飞速发展,人工智能已经成为了当今社会最热门的话题之一。从自动驾驶汽车到智能家居,再到医疗诊断和金融投资等领域,人工智能的应用已经渗透到我们生活的方方面面。在这个过程中,机器学习和深度学习作为人工智能的核心技术,扮演着至关重要的角色。

    2024年02月11日
    浏览(27)
  • Spring MVC学习之——数据传递(在页面上添加数据)

    编写controller 在index.jsp里面定义超链接 编写controller 在index.jsp里面定义超链接 编写controller 在index.jsp里面定义超链接

    2024年01月18日
    浏览(34)
  • Java学习day3——Javaweb登录页面设计(1)(含JSP代码)

    本文主要的内容是完成网页登录页面设计,以及判断用户名密码是否正确,如果正确,进入下一页面,并输出sessionID,若错误,则在登录页面给出用户名或密码错误提示,并在登录页面显示访问次数。 登录页面(userLogin.jsp) 用户名输入框 密码输入框 提交内容到登录处理页面

    2023年04月18日
    浏览(72)
  • 小程序页面间有哪些传递数据的方法?

    使用全局变量实现数据传递 在 app.js 文件中定义全局变量 globalData, 将需要存储的信息存放在里面使用的时候,直接使用 getApp() 拿到存储的信息 使用 wx.navigateTo 与 wx.redirectTo 的时候,可以将部分数据放在 url 里面,并在新页面 onLoad 的时候初始化 需要注意的问题: wx.navigat

    2024年02月10日
    浏览(30)
  • 小程序页面之间数据传递的五种方法

    使用 wx.navigateTo() 时,在 url 中拼接,这种方法适用于数据量少的情况 跳转前A页面在 url 中拼接参数,参数与路径之间使用 ? 分隔,参数键与参数值用 = 相连,不同参数用 分隔; 跳转到B页面在生命周期函数 onLoad 中接收 如果需要传递对象或数组,需先将对象或数据转为JSON字符

    2024年02月10日
    浏览(35)
  • Javaweb | 状态管理:Session、Cookie

    💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! 问题引入 HTTP协议是无转态的,不能保存提交的信息 如果用户发来一个新的请求,服务器无法知道它是否与上次的请求联系 对于那些需要多次提交数据才能完成的web操作,比如登录,就难以完成 概念 将浏览器与web服务

    2024年02月05日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包