`

设置session失效的几种方法

阅读更多

在系统登录后,都会设置一个当前session失效的时间,以确保在用户长时间不与服务器交互,自动退出登录,销毁session。
具体设置很简单,方法有三种:
(1)在主页面或者公共页面中加入:session.setMaxInactiveInterval(900);参数900单位是秒,即在没有活动15分钟后,session将失效。
这里要注意这个session设置的时间是根据服务器来计算的,而不是客户端。所以如果是在调试程序,应该是修改服务器端时间来测试,而不是客户端。
(2)也是比较通用的设置session失效时间的方法,就是在项目的web.xml中设置

 <!-- 设置session失效,单位分钟 -->
 <session-config>
     <session-timeout>1</session-timeout>
 </session-config>

(3)直接在应用服务器中设置,如果是tomcat,可以在tomcat目录下conf/web.xml中找到<session-config>元素,tomcat默认设置是30分钟,只要修改这个值就可以了。

需要注意的是如果上述三个地方如果都设置了,有个优先级的问题,从高到低:(1)>(2)>(3)

 

在很多系统中,也可能需要在session失效后做一些操作,如
(1)控制用户数,当session失效后,系统的用户数减少一个等,控制用户数在一定范围内,确保系统的性能。
(2)控制一个用户多次登录,当session有效时,如果相同用户登录,就提示已经登录了,当session失效后,就可以不用提示,直接登录了。
那么如何在session失效后,进行一系列的操作呢?
这里就需要用到监听器了,即当session因为各种原因失效后,监听器就可以监听到,然后执行监听器中定义好的程序就可以了。
监听器类为:HttpSessionListener类,有sessionCreated和sessionDestroyed两个方法
自己可以继承这个类,然后分别实现sessionCreated、sessionDestroyed方法
sessionCreated:指在session创建时执行的方法
sessionDestroyed:指在session失效时执行的方法

简单实例:

SessionListener类:

package com.study.web.listener;

import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

public class SessionListener implements HttpSessionListener {

    public void sessionCreated(HttpSessionEvent event) {
        HttpSession ses = event.getSession();
        String id = ses.getId() + ses.getCreationTime();
        ses.setMaxInactiveInterval(30);
        synchronized(this) {
            SummerConstant.USERNUM++; //用户数减一     
            SummerConstant.UserMap.put(id, Boolean.TRUE); //添加用户 
        }
    }

    public void sessionDestroyed(HttpSessionEvent event) {
        HttpSession ses = event.getSession();
        String id = ses.getId() + ses.getCreationTime();
        synchronized (this) {
            SummerConstant.USERNUM--; //用户数减一      
            SummerConstant.UserMap.remove(id); //从用户组中移除掉,用户组为一个map      
        }
    }
}

 SummerConstant类:

package com.study.web.listener;

import java.util.HashMap;
import java.util.Map;

public class SummerConstant {

    static int USERNUM;
    static Map UserMap = new HashMap();
}

 然后只需要把这个监听器在web.xml中做如下声明:

<listener>     
      <listener-class>
	com.study.web.listener.SessionListener      
      </listener-class>
</listener>

 

分享到:
评论

相关推荐

    设置Session失效的几种方法

    本文介绍了设置Session失效的几种方法,包括在主页面或公共页面中设置Session失效时间、在项目的web.xml中设置Session失效时间、直接在应用服务器中设置Session失效时间等。此外,还介绍了如何在Session失效后执行一...

    iframe跨域与session失效问题的解决办法

    在探讨如何解决iframe跨域与session失效的问题之前,我们需要了解几个重要的概念:什么是跨域,什么是session以及cookie。 首先,跨域问题通常出现在Web应用中,尤其是在使用iframe嵌入第三方网站内容时。在Web技术...

    Java设置session超时的几种方式总结

    以下,将详细介绍几种在Java中设置session超时的方法: 1. 在Web容器中设置 在Web应用服务器中设置session超时是最为基本和直接的方法。以Apache Tomcat为例,在Tomcat的安装目录下,通常会有一个conf文件夹,在这...

    JS之Session超时提示代码

    在Web开发中,Session是一种常见的用户会话管理机制,用于跟踪用户的交互状态。但Session具有生命周期限制,一旦超时,用户就需要重新登录。本篇文章将深入分析一个通过JavaScript(简称JS)实现的Session超时提示...

    IFrame中Session丢失的解决办法

    针对IFrame中Session丢失的问题,可以采取以下几种策略: 1. **使用StateServer模式管理Session:** 在Web.Config文件中配置`sessionState`元素,设置`mode`属性为`StateServer`,并指定`stateConnectionString`,...

    详解.net mvc session失效问题

    .net mvc中,Session失效需要考虑几种情况: •基于权限认证的Action,使用非Ajax请求; •基于权限认证的Action,使用JQueryt Ajax请求; •基于权限认证的Action,使用.net mvc封装的Ajax请求; •无权限认证的...

    ASP.NET Core-Session

    ASP.NET Core Session是微软开发的一种在Web应用程序中存储和管理用户会话状态的技术。它允许开发者在用户浏览器的不同请求之间保持数据,这对于实现购物车、用户登录状态等常见功能至关重要。在ASP.NET Core中,...

    session丢失解决方法

    本文将详细分析导致Session丢失的原因,并提供几种有效的解决方案。 #### 一、Session机制简介 在了解如何解决Session丢失的问题之前,首先需要了解Session的工作原理。Session是一种服务器端技术,用于跟踪用户的...

    ASP.NET 程序中删除文件夹导致session失效问题的解决办法分享

    在***应用程序开发中,会经常遇到程序需要在运行时删除文件夹...比如,可以设计一种机制,让应用程序在用户会话结束后再执行删除操作,或者在删除文件夹之前手动保存所有必要的session状态,以避免session失效的问题。

    Session 失效的原因汇总及解决丢失办法

    - 客户端问题:客户端设置如Cookie未启用或Session时间设置不当也可能导致Session失效。此外,IE浏览器对每个域的cookie数量有20个的限制,可能会导致Session丢失。 - 应用程序配置:某些情况下,应用程序可能会配置...

    浏览器关闭使session失效的问题多种解决方式

    为了解决这一问题,本文将介绍几种处理浏览器关闭导致session失效的方法。 方法一:使用隐藏的iframe定期刷新 这种方式是在每个页面中加入一个隐藏的iframe,利用AJAX技术以异步的方式定期向服务器发送请求进行页面...

    使用Ajax时处理用户session失效问题的解决方法

    在处理Ajax请求和session失效时,需要注意以下几点: 1. 服务器端需要识别Ajax请求并返回特定的头部信息,而不是直接返回JavaScript。 2. 客户端需要监听Ajax请求的完成或错误事件,检查服务器返回的session状态信息...

    jsp中存取session值简单介绍

    在上面的代码中,使用了JSTL标签库中的`&lt;c:set&gt;`来设置session中的变量,使用`&lt;c:out&gt;`标签来输出session中的变量值。 使用session时需要特别注意以下几点: 1. session默认的超时时间一般为30分钟,但开发者可以...

    JAVA之cookie与session

    3. **Session 的失效**:Session 可能因为以下几种情况而失效: - 使用 `HttpSession#invalidate()` 明确销毁 Session。 - 当客户端浏览器关闭时(对于基于浏览器的 Session)。 - 达到预设的最大空闲时间(例如 ...

    验证码的session问题

    然而,在验证码的Session问题中,可能会遇到以下几种常见问题: 1. **Session过期**:如果用户在一段时间内没有操作,Session可能会因为超时而被服务器清理,导致验证码失效。开发者需要设置合理的Session超时时间...

    6_session对象

    用户注销时,可以通过调用`session.invalidate()`方法使当前`session`失效。这会清除与该`session`关联的所有数据,并重新生成一个新的SessionID。这意味着用户再次访问需要登录的页面时,会被重新引导至登录界面...

    基于ZooKeeper的分布式Session实现

    4. **Session失效处理**:可以通过设置ZooKeeper节点的 watches(监视器)来监听Session过期。一旦节点被删除(代表Session失效),服务器将接收到通知并清理本地Session。 5. **负载均衡与容错**:结合负载均衡器...

    tomcat7+redis完成session共享

    2. **选择Session共享策略**:Tomcat提供了几种Session共享方式,包括JDBC、Memcached和Redis。这里我们选用Redis,需要添加相关依赖。在每个Tomcat实例的`WEB-INF/lib`目录下,添加Redis的Java客户端库,如`jedis....

    session控制用户名

    2. Session失效:用户关闭浏览器或者手动清除Cookies,Session ID丢失,服务器无法找到对应的Session,也会认为用户已登出。 3. Session共享:在分布式系统中,多个服务器需要共享Session数据,可以使用Session复制...

Global site tag (gtag.js) - Google Analytics