`
loveme13
  • 浏览: 25429 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

监听Session的过期及创建,SessionListener

    博客分类:
  • Java
阅读更多
java web中的Session

在JavaWeb中使用HttpSession(以下简称session)对象来表示一个会话。
Session的创建(代表会话周期的开始):第一次调用request.getSession()方法时,会创建一个session对象。
Session的销毁(代表会话周期的结束):在某个请求周期内调用了Session.invalidate()方法,此请求周期结束后,session被销毁;或者是session超时后自动销毁。
对于JSP,如果指定了<%@ page session="false"%>,则在JSP中无法直接访问内置的session变量,同时也不会主动创建session,因为此时JSP未自动执行request.getSession()操作获取session。
在session对象刚创建的第一个请求周期内,调用session.isNew()方法将得到true。
可以在web.xml文件中配置session默认的超时时间(分钟):
<session-config>
    <session-timeout>10</session-timeout>
</session-config>
也可以调用session. setMaxInactiveInterval()方法设置session超时时间(分钟)
SessionListener

通过SessionListenr可以监听session的创建和销毁,步骤:
1.写一个类MySessionListener,实现javax.servlet.http.HttpSessionListener接口及其sessionCreated()、sessionDestroyed()方法
2.在web.xml中配置SessionListener:
<listener>
    <listener-class>MySessionListener类全名</listener-class>
</listener>
当session被创建和销毁时,容器会分别调用SessionListener的sessionCreated()方法和sessionDestroyed()方法,这两个方法中传入了一个参数对象HttpSessionEvent,可以通过此对象的getSession()方法获取session对象。


应用:在线人数统计

import java.util.HashSet;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

public class MySessionListener implements HttpSessionListener {

       public void sessionCreated(HttpSessionEvent event) {
              HttpSession session = event.getSession();
              ServletContext application = session.getServletContext();
             
              // 在application范围由一个HashSet集保存所有的session
              HashSet sessions = (HashSet) application.getAttribute("sessions");
              if (sessions == null) {
                     sessions = new HashSet();
                     application.setAttribute("sessions", sessions);
              }
             
              // 新创建的session均添加到HashSet集中
              sessions.add(session);
              // 可以在别处从application范围中取出sessions集合
              // 然后使用sessions.size()获取当前活动的session数,即为“在线人数”
       }

       public void sessionDestroyed(HttpSessionEvent event) {
              HttpSession session = event.getSession();
              ServletContext application = session.getServletContext();
              HashSet sessions = (HashSet) application.getAttribute("sessions");
             
              // 销毁的session均从HashSet集中移除
              sessions.remove(session);
       }
}
分享到:
评论

相关推荐

    判断session过期的方式

    Java Web应用可以注册Session监听器来监听Session的生命周期事件,包括创建、销毁以及过期。当Session被废弃或过期时,监听器的`sessionDestroyed()`方法会被调用。这可以用来实现自动清理过期Session的功能。以下是...

    JAVA SESSION监听器

    HttpSessionListener提供了对Session创建、销毁事件的监听,而HttpSessionAttributeListener则可以监听Session属性的变化,比如添加、移除和替换事件。 以下是创建一个简单的HttpSessionListener的例子: ```java ...

    session过期时间设置

    设置Session过期时间的方法有多种: 1. **编程方式**: 通过Java代码设置Session的过期时间,例如在主页面或公共页面中加入以下代码: ```java HttpSession ses = request.getSession(); ses....

    Session过期后自动跳转到登录页面的实例代码

    在本文中,我们将探讨如何在Session过期后自动将用户重定向到登录页面。 首先,开发者可能尝试使用Session监听器(HttpSessionListener)来检测Session的过期。监听器是Java Servlet规范的一部分,允许我们注册监听...

    使用SessionListener+持久化Session+Springmvc拦截器实现单点登录

    在单点登录场景下,`SessionListener`通常用来监听用户登录事件,当用户在一个系统中登录后,我们可以通过`SessionListener`来创建或更新全局的会话信息,确保其他系统能够识别这个登录状态。 ### 持久化Session 在...

    shiro+redis做session管理

    6. **会话事件监听**:Shiro允许添加`SessionListener`来监听Session的创建、销毁、过期等事件。你可以自定义`SessionListener`来处理这些事件,例如在Session过期时发送通知。 7. **最后,将配置应用于Web应用**:...

    Tomcat+redis、session同步

    - **监听器**:在`Tomcat`中添加`SessionListener`,以便在`session`创建、销毁时通知`Redis`,保持两者同步。 - **冲突解决**:在分布式环境下,可能有多个服务器同时尝试更新同一`session`,需要确保`Redis`的...

    S2SH用户重复登录问题[文].pdf

    `sessionDestroyed()`方法在session过期或被显式销毁时调用。在这里,我们移除了与销毁session关联的用户,以表示该用户已退出登录。 `attributeAdded()`方法在向session中添加新属性时调用。我们检查添加的属性...

    SpringBoot整合Shiro,实现从数据库加载权限、权限的动态更新、Session共享

    2. **Session事件监听**:通过实现`SessionListener`接口,可以在Session创建、修改、过期等事件发生时进行相应处理。 **四、SpringBoot整合** 1. **启动器配置**:创建一个SpringBoot的启动器类,使用`@...

    shiro+redis.zip

    4. 会话监听器:为了处理会话过期、创建和销毁事件,可以注册一个实现了 `org.apache.shiro.session.SessionListener` 接口的监听器,并在 Redis 中处理这些事件。 5. 安全会话管理:Shiro 提供了基于 Redis 的 ...

    Spring Quartz 定时器

    `SessionListener.java`可能是一个监听会话(Session)的类。在Web应用中,会话监听器可以监控用户的会话状态,例如在用户会话超时时触发清理操作。在结合Quartz的场景下,这个监听器可能在检测到会话过期时触发一个...

    shiro基础jar包

    7. **Session 管理**:包括 SessionDAO(用于持久化会话)、SessionManager 和 SessionListener,提供会话创建、更新、删除以及过期的处理。 8. **Cache 支持**:Shiro 支持缓存管理,提高性能并减少对后端数据源的...

    【SpringBoot】廿三、SpringBoot中整合Shiro实现权限管理.docx

    - 通过`SessionListener`和`EventListeners`,可以实现对会话事件的监听,例如会话创建、更新、过期等。 综上,通过SpringBoot与Shiro的整合,我们可以轻松地在应用程序中实现用户认证和权限控制,提供安全且易于...

    Shiro开发文档

    - **SessionListener**:监听 Session 的变化事件。 - **SessionStorage/Persistence**:存储和持久化 Session 的数据。 - **SessionValidation**:定期检查和清理过期的 Session。 - **SessionFactory**:创建 ...

    shiro用户教程pdf

    会话监听器(SessionListener)用于监听会话事件,例如会话创建、会话过期等。 #### 10.4 会话存储/持久化 为了保持会话数据的一致性和持久性,Shiro支持多种会话存储选项,如内存存储、数据库存储等。 #### 10.5...

    关于Shiro安全框架的详细教程

    - **SessionListener**: 监听会话的生命周期事件,如创建、销毁等。 **会话存储/持久化** - **SessionDAO**: 用于存储和检索会话数据。 - **SessionStore**: 存储会话数据的方式,如内存、数据库等。 **会话验证*...

    liu_guo_feng-shiro-demo-master_java_源码.zip

    - **SessionListener**:监听会话事件,如会话创建、过期、停止等。 6. **Web应用集成** - **Filter**:Shiro提供了Web过滤器,如`FormAuthenticationFilter`用于表单登录,`RememberMeAuthenticationFilter`实现...

    Shirodemo安全框架

    `SessionListener`可以监听会话事件,如会话超时、新建、销毁等。 **5. 过滤器配置** 在ShiroDemo中,通常我们会配置一系列的过滤器(Filter)来实现安全控制。例如,`FormAuthenticationFilter`处理表单登录,`...

Global site tag (gtag.js) - Google Analytics