`
frank1998819
  • 浏览: 752073 次
  • 性别: Icon_minigender_1
  • 来自: 南京
文章分类
社区版块
存档分类

Session生命周期(转)

 
阅读更多

文章级别:Java初级 预备技能点:JSP内置对象, 监听器, 序列化

在程序开发的时候, request session appplication内置对象, 是用的比较多的. request和appliction比较简单, 一个代表一次请求的生命周期. 另一个代表应用程序的生命周期. 多说一点application是单态模式. 在任何地方打印application内置对象,得到的是同一个地址. 因此可以存储程序的公共变量,而非个人的公共变量(个人的公共变量 例如登录信息) 应该存储到Session中
今天我就详细讲解下中间那个兄弟. 因为在网上看到很多文章. 几乎毫无例外的说. 一个浏览器只有一个Session, 浏览器关闭Session就消失了.其实这种方法是不正确的.
要了解Session首先要知道一个概念:Session的销毁只有两种情况:第一:session调用了 session.invalidate()方法. 第二:前后两次请求超出了session指定的生命周期时间. 其中Session的生命周期时间可以在web.xml配置. 默认30分钟 在web.xml可以做如下配置:
<session-config>
<session-timeout>5</session-timeout>
</session-config>
如何来证明关闭浏览器的时候Session没有销毁呢? 我们可以创建一个SessionListener 此监听器专门用来监听Session的生命周期的.代码如下:


别忘记在web.xml中配置监听器, 配置完毕后 可以做个测试. 当浏览器关闭后此监听器的 sessionDestroyed方法并没有执行,而是在5分钟左右(个人电脑没有那么精确) 才会触发sessionDestroyed ,当然 再打开浏览器的时候 sessionCreated 会自动调用 关闭5分钟后sessionDestroyed 又会自动调用, 通过getID方法大家可以判断是否为同一个Session. 所以网上说明的关闭浏览器Session就消失.其实并不正确. 如果没有任何配置的情况下. 关闭浏览器30分钟后Session才会消失的.
我们可以利用这个概念做什么呢? 最典型的就是利用 SessionListener 的sessionDestroyed方法 来记录用户非正常退出的时间. 用户在访问某个网站的时候(目前的银行网站都有此功能) 显示了用户的最后登录时间. 此时间如何获取. 在这里分两种情况
如果用户按"退出" 按钮那就好说了. 跳转到action中.记录下用户退出的时间. 存储到持久层中
如果用户非正常退出, 在没有配置Session的情况下 默认会在30分钟后调用sessionDestroyed 那么我们同样可以在此获取用户退出的时间,在sessionDestroyed 调用业务逻辑完成我们想要实现的功能
 
有关Session第2个典型的应用就是Session中存储了用户的登录信息. 那么就可以访问用户权限的一些页面.
有关这个应用要注意一个问题: 存储到session中的 User对象一定要实现Serializable接口. Serializable的作用可以参考相关资料.正常情况下当我们做测试的时候关闭Tomcat 大家会在 Tomcat安装目录\work\Catalina\localhost\项目名 文件夹下面看到有一个 SESSIONS.ser 的文件.


此文件就是Session在Tomcat停止的时候 持久化到硬盘中的文件. 所有当前访问的用户Session都存储到此文件中. Tomcat启动成功后.SESSIONS.ser 又会反序列化到内存中,所以启动成功后此文件就消失了. 所以正常情况下 从启Tomcat用户是不需要登录的. 注意有个前提.就是存储到Session里面的user对象所对应的User类必须要序列化才可以
分享到:
评论

相关推荐

    hibernate session生命周期示例

    本示例将深入探讨Hibernate Session的生命周期及其使用,帮助你更好地理解和运用这个强大的工具。 Hibernate Session是Hibernate的核心接口,它是与数据库交互的主要接口。Session对象负责管理实体对象的状态,包括...

    session生命周期的设置

    Session生命周期的设置是管理用户会话的关键环节,它决定了一个Session对象从创建到失效的时间间隔。本篇将深入探讨Session的工作原理、生命周期以及如何进行有效设置。 一、Session的工作原理 Session的工作基于...

    c#.net配置Session的生命周期.rar(视频)

    通过Ex01_05视频教程,你将详细学习到如何在实际项目中配置和管理C#.NET的Session生命周期,包括设置超时、选择存储模式以及优化Session使用等技巧。这将有助于你更好地理解Session在Web开发中的角色,从而提升应用...

    xfire开发的带session生命周期的webservice应用工程实例

    本项目实例旨在演示如何利用XFire来开发一个带有Session生命周期管理的Web服务。 首先,让我们深入了解XFire。XFire(现已被Apache CXF所取代)是一个轻量级的Web服务框架,它提供了快速、简单地创建和部署Web服务...

    使用监听器跟踪session的生命周期和session的属性

    以下是关于使用监听器跟踪Session生命周期和属性的详细解释。 1. **HttpSessionListener**: - `HttpSessionListener` 是Servlet API提供的一种接口,用于监听HttpSession对象的创建和销毁事件。 - 当一个新的...

    session的生命周期1

    以下是对`Session`生命周期、何时失效以及对浏览器要求的详细解释。 ### Session的生命周期 1. **创建**:当用户首次访问包含JSP、Servlet等动态内容的网页时,服务器会检查是否存在当前用户的`Session`。如果没有...

    spring bean的生命周期

    Spring Bean的生命周期是Spring框架中的核心概念,它涵盖了Bean从创建到销毁的全过程。了解这一过程对于优化应用程序的性能和管理资源至关重要。在Spring中,Bean的生命周期主要分为以下几个阶段: 1. **初始化阶段...

    详解Spring中Bean的生命周期和作用域及实现方式

    Spring中Bean的生命周期和作用域及实现方式 Spring是一个非常流行的Java应用程序框架,它提供了一个灵活的机制来管理Bean的生命周期和作用域。Bean的生命周期和作用域是Spring框架中两个非常重要的概念,它们决定了...

    关于PHP5 Session生命周期介绍

    首先,Session生命周期的起点是生成一个Session ID。这个ID通常在用户首次访问服务器时由服务器生成,并且是随机的,以便每个用户的Session ID都是唯一的。Session ID的生成可以使用PHP内置的函数,比如session_id()...

    过滤器对于session周期的控制

    在探讨如何通过`OpenSessionInViewFilter`来有效管理Hibernate中的Session生命周期之前,我们需要先理解Session及其生命周期的基本概念。 #### Session与生命周期 在Hibernate框架中,`Session`是执行数据库操作的...

    创建多种生命周期的DataSnapServer

    本话题主要关注DataSnap Server的三种生命周期:Invocation生命周期,Session生命周期,以及Server生命周期。我们将深入探讨这些概念,并结合提供的文件名称列表来解析它们在实际应用中的意义。 首先,我们来看`...

    hibernate的生命周期

    1. 应该尽量减少持久态对象的生命周期,避免长时间持有Session,以降低内存占用和提高系统性能。 2. 使用Transaction来包裹对数据库的所有操作,保证数据的一致性。 3. 对于大量数据的操作,考虑使用批处理更新和...

    Spring bean生命周期demo

    在Spring框架中,Bean的生命周期是指从创建到销毁的整个过程。这个过程包含了初始化、正常使用以及最终的销毁几个阶段。了解并掌握Spring Bean的生命周期对于优化应用性能和资源管理至关重要。接下来,我们将深入...

    测试实体对象的生命周期

    本文将详细探讨“测试实体对象的生命周期”,并结合给定的标签“源码”和“工具”,阐述如何通过Hibernate Session来理解和控制这些对象的状态。 首先,理解实体对象的生命周期对于数据库操作至关重要。在Hibernate...

    Application,Session,Cookie,ViewState和Cache生命周期

    Application,Session,Cookie,ViewState和Cache生命周期

    Hibernate持久化对象的生命周期

    Hibernate的核心概念之一就是持久化对象的生命周期,这涉及到对象在数据库中的状态及其与Session的关系。 首先,我们来看一下Hibernate中持久化对象的三种基本状态: 1. **瞬时对象(Transient Objects)**: - ...

    php5的session详解

    - **`session_start()`**:开始一个新的 Session 或者恢复一个已存在的 Session。 - 这个函数没有参数,且返回值均为 true。 - 如果使用基于 Cookie 的 Session,则在使用任何输出前调用 `session_start()` 是很...

    session、viewstate jQuery SQL存储过程等一系列教学网站 相当实用哦

    #### 三、Session的生命周期 1. **创建**:当用户首次访问应用时。 2. **使用**:在整个会话过程中,可以读取和修改Session中的数据。 3. **销毁**:通常情况下,Session会在一定时间后自动失效,也可以手动销毁。 ...

    hibernate3.2生命周期

    为了方便地调试和理解对象的生命周期,开发者可以利用如Eclipse Hiberante Tools、IntelliJ IDEA的Hibernate插件等工具,它们提供了图形化的Session管理和对象状态查看功能。 总结,理解Hibernate3.2中的对象生命...

Global site tag (gtag.js) - Google Analytics