在系统登录后,都会设置一个当前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失效时间、在项目的web.xml中设置Session失效时间、直接在应用服务器中设置Session失效时间等。此外,还介绍了如何在Session失效后执行一...
在探讨如何解决iframe跨域与session失效的问题之前,我们需要了解几个重要的概念:什么是跨域,什么是session以及cookie。 首先,跨域问题通常出现在Web应用中,尤其是在使用iframe嵌入第三方网站内容时。在Web技术...
以下,将详细介绍几种在Java中设置session超时的方法: 1. 在Web容器中设置 在Web应用服务器中设置session超时是最为基本和直接的方法。以Apache Tomcat为例,在Tomcat的安装目录下,通常会有一个conf文件夹,在这...
在Web开发中,Session是一种常见的用户会话管理机制,用于跟踪用户的交互状态。但Session具有生命周期限制,一旦超时,用户就需要重新登录。本篇文章将深入分析一个通过JavaScript(简称JS)实现的Session超时提示...
针对IFrame中Session丢失的问题,可以采取以下几种策略: 1. **使用StateServer模式管理Session:** 在Web.Config文件中配置`sessionState`元素,设置`mode`属性为`StateServer`,并指定`stateConnectionString`,...
.net mvc中,Session失效需要考虑几种情况: •基于权限认证的Action,使用非Ajax请求; •基于权限认证的Action,使用JQueryt Ajax请求; •基于权限认证的Action,使用.net mvc封装的Ajax请求; •无权限认证的...
ASP.NET Core Session是微软开发的一种在Web应用程序中存储和管理用户会话状态的技术。它允许开发者在用户浏览器的不同请求之间保持数据,这对于实现购物车、用户登录状态等常见功能至关重要。在ASP.NET Core中,...
本文将详细分析导致Session丢失的原因,并提供几种有效的解决方案。 #### 一、Session机制简介 在了解如何解决Session丢失的问题之前,首先需要了解Session的工作原理。Session是一种服务器端技术,用于跟踪用户的...
在***应用程序开发中,会经常遇到程序需要在运行时删除文件夹...比如,可以设计一种机制,让应用程序在用户会话结束后再执行删除操作,或者在删除文件夹之前手动保存所有必要的session状态,以避免session失效的问题。
- 客户端问题:客户端设置如Cookie未启用或Session时间设置不当也可能导致Session失效。此外,IE浏览器对每个域的cookie数量有20个的限制,可能会导致Session丢失。 - 应用程序配置:某些情况下,应用程序可能会配置...
为了解决这一问题,本文将介绍几种处理浏览器关闭导致session失效的方法。 方法一:使用隐藏的iframe定期刷新 这种方式是在每个页面中加入一个隐藏的iframe,利用AJAX技术以异步的方式定期向服务器发送请求进行页面...
在处理Ajax请求和session失效时,需要注意以下几点: 1. 服务器端需要识别Ajax请求并返回特定的头部信息,而不是直接返回JavaScript。 2. 客户端需要监听Ajax请求的完成或错误事件,检查服务器返回的session状态信息...
在上面的代码中,使用了JSTL标签库中的`<c:set>`来设置session中的变量,使用`<c:out>`标签来输出session中的变量值。 使用session时需要特别注意以下几点: 1. session默认的超时时间一般为30分钟,但开发者可以...
3. **Session 的失效**:Session 可能因为以下几种情况而失效: - 使用 `HttpSession#invalidate()` 明确销毁 Session。 - 当客户端浏览器关闭时(对于基于浏览器的 Session)。 - 达到预设的最大空闲时间(例如 ...
然而,在验证码的Session问题中,可能会遇到以下几种常见问题: 1. **Session过期**:如果用户在一段时间内没有操作,Session可能会因为超时而被服务器清理,导致验证码失效。开发者需要设置合理的Session超时时间...
用户注销时,可以通过调用`session.invalidate()`方法使当前`session`失效。这会清除与该`session`关联的所有数据,并重新生成一个新的SessionID。这意味着用户再次访问需要登录的页面时,会被重新引导至登录界面...
4. **Session失效处理**:可以通过设置ZooKeeper节点的 watches(监视器)来监听Session过期。一旦节点被删除(代表Session失效),服务器将接收到通知并清理本地Session。 5. **负载均衡与容错**:结合负载均衡器...
2. **选择Session共享策略**:Tomcat提供了几种Session共享方式,包括JDBC、Memcached和Redis。这里我们选用Redis,需要添加相关依赖。在每个Tomcat实例的`WEB-INF/lib`目录下,添加Redis的Java客户端库,如`jedis....
2. Session失效:用户关闭浏览器或者手动清除Cookies,Session ID丢失,服务器无法找到对应的Session,也会认为用户已登出。 3. Session共享:在分布式系统中,多个服务器需要共享Session数据,可以使用Session复制...