`

Session的创建和销毁

    博客分类:
  • web
 
阅读更多
session什么时候被创建

一个常见的错误是以为 session 在有客户端访问时就被创建,然而事实是直到某 server 端程序(如 Servlet )调用
HttpServletRequest.getSession(true)  //false 不会自动创建Session 
这样的语句时才会被创建。所以没有调用getSession方法则不会创建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的生命周期的.代码如下:

// 新建一个session时触发此操作  
    public void sessionCreated(HttpSessionEvent se) {   
        System.out.println(se.getSession().getId());  
    }  
  
    // 销毁一个session时触发此操作  
    public void sessionDestroyed(HttpSessionEvent se) {  
       System.out.println(se.getSession().getId()); 
    }  


   别忘记在web.xml中配置监听器, 配置完毕后 可以做个测试。当浏览器关闭后此监听器的 sessionDestroyed方法并没有执行,而是在5分钟左右(个人电脑没有那么精确) 才会触发sessionDestroyed ,当然 再打开浏览器的时候 sessionCreated 会自动调用 关闭5分钟后sessionDestroyed 又会自动调用, 通过getID方法大家可以判断是否为同一个Session. 所以网上说明的关闭浏览器Session就消失.其实并不正确。如果没有任何配置的情况下. 关闭浏览器30分钟后Session才会消失的。
   我们可以利用这个概念做什么呢? 最典型的就是利用 SessionListener  的sessionDestroyed方法 来记录用户非正常退出的时间. 用户在访问某个网站的时候(目前的银行网站都有此功能) 显示了用户的最后登录时间. 此时间如何获取. 在这里分两种情况
   如果用户按"退出" 按钮那就好说了. 跳转到action中.记录下用户退出的时间. 存储到持久层中。
   如果用户非正常退出, 在没有配置Session的情况下 默认会在30分钟后调用sessionDestroyed 那么我们同样可以在此获取用户退出的时间,在sessionDestroyed 调用业务逻辑完成我们想要实现的功能。

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    监听session的创建到销毁

    - **统计在线用户**:通过监听Session创建和销毁,可以实时统计网站上的在线用户数量。 - **资源释放**:在Session销毁时,可以清理与之关联的数据库连接或其他资源。 - **安全控制**:检测长时间未活动的Session...

    j2ee实验二:学习使用Session和Cookie

    5. **开发一个Session监听器**:实现Session创建和销毁时的监听逻辑。 #### 实验环境搭建 为了顺利进行实验,需要准备以下硬件和软件环境: - **硬件配置**:至少配备2GHz以上的CPU、1GB以上的RAM和1GB可用硬盘...

    SpringSession同时支持Cookie和header策略

    此外,这个类可能还会包含一些回调方法,如`onNewSession`和`onInvalidateSession`,用于在session创建和销毁时执行特定操作。 总的来说,SpringSession通过`CookieHeaderHttpSessionStrategy.java`这类策略类,...

    session过期时间设置

    监听器是Java Web应用程序中用于监听特定事件(如Session创建和销毁)的对象。对于Session,我们可以实现`HttpSessionListener`接口。 以下是一个简单的`SessionListener`示例: ```java public class ...

    监听器:监听三个对象的创建和销毁方法

    本次工程的目标是学习监听器,掌握监听三个对象的创建和销毁方法。 三个对象:rquest,session,ServletContext 实现的接口:ServletRequestListener,HttpSessionListener,ServletContextListener 工程的大致步骤...

    redis-session-manager-tomcat6共享包

    3. 配置session监听器:可能需要创建一个实现了`javax.servlet.http.HttpSessionListener`接口的类,以便在session创建和销毁时进行相应操作,例如同步Redis中的session状态。 4. 重启Tomcat:完成上述配置后,重启...

    HttpSessionListener监听session的创建及销毁,实现在线用户统计

    用户登录时,调用LoginServlet,将用户名写入application的在线用户列表中,用户退出时,调用LogoutServlet,调用session.invalidate(),交给HttpSessionListener的sessionDestroyed()方法,将用户从在线列表中删除。...

    tomcat7 jedis session 同步

    4. **自定义Session监听器**:创建一个实现了`javax.servlet.http.HttpSessionListener`接口的类,用于在Session创建和销毁时,将Session数据存入或从Redis中取出。 5. **处理Session数据序列化**:由于Session数据...

    memcached实现多个tomcat 共享一个session

    监听器负责将session创建和销毁的事件映射到memcached操作。 4. **session管理策略**:在Tomcat的server.xml配置文件中,设置`&lt;Manager&gt;`元素来指定session管理策略,例如使用`org.apache.catalina.session....

    session销毁方式

    如果当前没有Session,则创建一个新的Session。 - `setMaxInactiveInterval(int interval)`:该方法用于设置Session的非活动超时时间(单位为秒)。一旦超过这个时间且没有新的活动发生,Session将被自动销毁。 **...

    在线人数统计

    `HttpSessionListener`是Servlet API中的一部分,它允许我们在session创建和销毁时执行自定义操作。在本例中,我们监听session的创建和销毁事件,以跟踪在线人数的变化。当用户首次访问网站并创建session时,我们...

    过滤器filter和监听器listener的应用总结

    3. **监听器接口**:例如,`javax.servlet.http.HttpSessionListener`接口中的`sessionCreated(HttpSessionEvent se)`和`sessionDestroyed(HttpSessionEvent se)`方法,分别在新的Session创建和销毁时被调用。...

    数据库知识

    当Session创建和销毁时,这个监听器可以执行相应的逻辑,如增加或减少在线用户计数。 在配置文件`web.xml`中,我们需要声明这个监听器,确保它在Web应用启动时被加载和注册。例如: ```xml &lt;!-- ... --&gt; ...

    显示在线人员

    1. **HttpSessionListener**: 这个Listener可以监听用户的session创建和销毁事件。当用户打开浏览器并访问网站时,服务器为该用户创建一个session。我们可以在session创建时记录在线人数加一,session销毁(如超时或...

    网站统计在线人数,当前年、月、日访问量JAVA代码

    1. **创建会话监听器**:在Java Web应用中,可以创建一个实现了javax.servlet.HttpSessionListener的监听器类,用于在session创建和销毁时执行相应的操作。当新session创建时,增加在线人数;当session失效时,减少...

    Servlet和Jsp学习指南源代码.rar

    9. **过滤器(Filter)和监听器(Listener)**:如何使用Filter拦截请求并预处理,以及使用Listener监听特定事件,如session创建和销毁。 10. **Servlet 3.0新特性**:包括异步处理、注解配置、...

    用web.xml控制Web应用的行为

    这里的`com.example.SessionCreationListener`和`com.example.SessionDestroyListener`分别对应Session创建和销毁的监听器实现类。 四、会话超时与错误页面 在`web.xml`中,我们可以设置默认的会话超时时间,以及...

    PHP中session变量的销毁

    1.何为session?相当于一个客户端(可以是浏览器、app、ftp等其他,而且同一个浏览器多开几个又算是不同的客户端)对...session_unset()释放当前在内存中已经创建的所有$_SESSION变量,但不删除session文件以及不释放对

    javaweb项目16-20

    7. **Filter和Listener**:学习使用Servlet Filter拦截和修改HTTP请求和响应,以及Servlet Listener监听Web应用中的事件,如session创建和销毁。 8. **Spring框架**:Spring是Java EE开发中广泛使用的轻量级框架,...

    java软件工程师笔试题

    7. **Servlet监听器和过滤器**:监听器监听特定事件并作出响应,如session创建和销毁;过滤器在请求处理前后执行特定逻辑。两者的区别在于监听器关注事件,过滤器关注数据流。 8. **MVC模式**:模型-视图-控制器,...

Global site tag (gtag.js) - Google Analytics