文章级别: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-timeout>5</session-timeout>
</session-config>
如何来证明关闭浏览器的时候Session没有销毁呢? 我们可以创建一个SessionListener 此监听器专门用来监听Session的生命周期的.代码如下:
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
import javax.servlet.http.HttpSessionListener;
public class SessionListener implements HttpSessionListener {
public void sessionCreated(HttpSessionEvent se) {
System.out.println("session监听:创建 >>"+se.getSession().getId());
System.out.println("session监听:创建 >>"+se.getSession().getId());
}
public void sessionDestroyed(HttpSessionEvent se) {
System.out.println("session监听:销毁 >>"+se.getSession().getId());
System.out.println("session监听:销毁 >>"+se.getSession().getId());
}
}
别忘记在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类必须要序列化才可以.
相关推荐
Session生命周期的设置是管理用户会话的关键环节,它决定了一个Session对象从创建到失效的时间间隔。本篇将深入探讨Session的工作原理、生命周期以及如何进行有效设置。 一、Session的工作原理 Session的工作基于...
本示例将深入探讨Hibernate Session的生命周期及其使用,帮助你更好地理解和运用这个强大的工具。 Hibernate Session是Hibernate的核心接口,它是与数据库交互的主要接口。Session对象负责管理实体对象的状态,包括...
本项目实例旨在演示如何利用XFire来开发一个带有Session生命周期管理的Web服务。 首先,让我们深入了解XFire。XFire(现已被Apache CXF所取代)是一个轻量级的Web服务框架,它提供了快速、简单地创建和部署Web服务...
通过Ex01_05视频教程,你将详细学习到如何在实际项目中配置和管理C#.NET的Session生命周期,包括设置超时、选择存储模式以及优化Session使用等技巧。这将有助于你更好地理解Session在Web开发中的角色,从而提升应用...
首先,Session生命周期的起点是生成一个Session ID。这个ID通常在用户首次访问服务器时由服务器生成,并且是随机的,以便每个用户的Session ID都是唯一的。Session ID的生成可以使用PHP内置的函数,比如session_id()...
以下是关于使用监听器跟踪Session生命周期和属性的详细解释。 1. **HttpSessionListener**: - `HttpSessionListener` 是Servlet API提供的一种接口,用于监听HttpSession对象的创建和销毁事件。 - 当一个新的...
在探讨如何通过`OpenSessionInViewFilter`来有效管理Hibernate中的Session生命周期之前,我们需要先理解Session及其生命周期的基本概念。 #### Session与生命周期 在Hibernate框架中,`Session`是执行数据库操作的...
本话题主要关注DataSnap Server的三种生命周期:Invocation生命周期,Session生命周期,以及Server生命周期。我们将深入探讨这些概念,并结合提供的文件名称列表来解析它们在实际应用中的意义。 首先,我们来看`...
2. Session生命周期: 新的浏览器窗口开启会启动一个新的Session,并可能触发`Global.asax`中的`Session_Start`事件。同一浏览器窗口内的多个页面请求不会创建新Session。Session过期后,即使页面提交,也会触发新...
这两个接口提供了对Session生命周期事件的监听方法: 1. `HttpSessionListener`: 包含两个方法,`sessionCreated(HttpSessionEvent se)`用于监听Session创建事件,`sessionDestroyed(HttpSessionEvent se)`用于监听...
然而,有些情况下我们并不需要完整的Session生命周期,比如执行只读操作或者简单的数据检索。在这种情况下,使用Hibernate-nosession模式可以避免创建和管理Session的开销,从而提高应用性能。nosession模式并不意味...
#### 三、Session的生命周期 1. **创建**:当用户首次访问应用时。 2. **使用**:在整个会话过程中,可以读取和修改Session中的数据。 3. **销毁**:通常情况下,Session会在一定时间后自动失效,也可以手动销毁。 ...
3. **调整Session生命周期**:可以通过修改`<sessionState>`元素的`timeout`属性来延长或缩短Session的有效时间。 4. **检查配置**:核对web.config中的Session配置,确保它们符合预期。 5. **修正IIS设置**:检查...
这可能是因为服务器上的Session生命周期设置过长,或者由于使用了持久化Cookie。解决方法是设置合理的Session生命周期,并在必要时清除用户的Cookie: ```php // 设置 Session 生命周期为 30 分钟 ini_set('session...
如果session过期,通常是因为设置的session生命周期已到达,或者是由于某些原因session数据被清除。 在phpcms中,session配置可以在`config.php`或`phpcms/inc.php`等配置文件中找到。可以调整以下参数来解决...
- **Session生命周期**:从用户第一次访问网站开始,直到会话结束或超时为止。 - **安全性**:由于`session`信息存储在服务器端,因此相比客户端的`cookie`而言更加安全。 - **资源消耗**:尽管`session`提高了安全...
1. **Session生命周期**:默认情况下,Session的生命周期大约为30分钟,即用户在30分钟内无操作,Session就会被服务器自动销毁。这个时间可以通过`setMaxInactiveInterval()`方法在服务器端进行设置。 2. **检测...
以下是对`Session`生命周期、何时失效以及对浏览器要求的详细解释。 ### Session的生命周期 1. **创建**:当用户首次访问包含JSP、Servlet等动态内容的网页时,服务器会检查是否存在当前用户的`Session`。如果没有...
- 设置适当的Cookie和Session生命周期,防止长期有效的登录令牌被滥用。 6. **最佳实践**: - 考虑使用更现代的身份验证机制,如JWT(JSON Web Tokens),它们可以提供更安全、更灵活的用户认证方案。 通过以上...