`

javaWeb session失效时间设置

阅读更多
session失效时间设置


session失效时间设置
一、java代码   <!--优先级是最高的-->
<!--秒为单位,1800= 60*30 即30分种-->
request.getSession().setMaxInactiveInterval(1800);


二、web.xml  
<session-config>   <!--分钟为单位-->
    <session-timeout>30</session-timeout>
</session-config>

三、web服务器resin.conf,tomcat,<!--优先级是最低的-->
<session-config>   <!--分钟为单位-->
    <session-timeout>30</session-timeout>
    <enable-url-rewriting>false</enable-url-rewriting>
</session-config>

优先级: 1 > 2 > 3


session 在tomcat重启后一般也不会失效,
关闭浏览器后,session失效,但服务器端的session不会立刻销毁,
而是存活一个session生命周期。

引用


首先需要理解一下几点:
1、Http是无状态的,即对于每一次请求都是一个全新的请求,服务器不保存上一次请求的信息
2、Session是保存在服务端的,为什么后续请求会读取到session?因为请求会包含一个sessionId,该值存储在cookie中,服务器通过这个sessionId找到对应的session
3、cookie是有过期时间的,规则如下:
Cookie的Max-Age决定了Cookie的有效期,单位为秒
0:Cookie立即作废(如果原先浏览器已经保存了该Cookie,那么可以通过设置Max-Age为0使其失效)
<0:默认,表示只在浏览器内存中存活,一旦浏览器关闭则Cookie销毁,浏览器的max-age默认为-1
>0: 将Cookie持久化到硬盘上,有效期由Max-Age决定

综上所述:
sessionId是一个cookie,max-age默认为-1,即关闭浏览器后sessionId就会清空,
sessionId(cookie)清空后,自然就无法找到对应的session,所以session就失效了。




在一般系统中,也可能需要在session失效后做一些操作:
(1)控制用户数,当session失效后,系统的用户数减少一个等,控制用户数在一定范围内,确保系统的性能。
(2)控制一个用户多次登录,当session有效时,如果相同用户登录,就提示已经登录了,当session失效后,就可以不用提示,直接登录了。

那么如何在session失效后,进行一系列的操作呢?
这里就需要用到监听器了,即当session因为各种原因失效后,监听器就可以监听到,然后执行监听器中定义好的程序就可以了。

监听器类为: HttpSessionListener 类,有 sessionCreated 和sessionDestroyed 两个方法
  自己可以继承这个类,然后分别实现。
  sessionCreated指在session创建时执行的方法
  sessionDestroyed指在session失效时执行的方法

如下:
public class OnlineListener  implements HttpSessionListener{      

      public void sessionCreated(HttpSessionEvent event) {      
         HttpSession ses = event.getSession();      
         String id=ses.getId()+ses.getCreationTime();      
          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     
          }      
       }      
 }



把这个监听器在web.xml中声明就可以了:
<listener>     
    <listener-class>com.demo.system.listener.OnlineListener</listener-class>
</listener> 



上面是一个简单的利用session监听用户数的方法,在实际过程中,可能比这个复杂得多。





-
分享到:
评论

相关推荐

    JavaWeb Session失效时间设置方法

    本文将详细介绍如何设置JavaWeb Session的失效时间以及失效后如何进行相关操作。 首先,Session的失效时间可以通过以下三种方式设置,其优先级从高到低依次为: 1. **Java代码设置**:通过`request.getSession()....

    javaWeb_Session(实现用户一段时间自动登录)

    1. **过期时间设置**:Session过期时间不宜过长,以防止恶意用户长时间占用服务器资源。通常设置为20分钟到1小时。 2. **Session失效策略**:除了基于时间的失效外,还可以配置为无操作一定时间后自动失效,或者在...

    Java中设置session超时(失效)的三种方法

    在Spring框架中,可以使用@SessionAttributes注解,它允许我们指定一个或多个模型属性,这些属性会被存储在一个会话范围内的session中,还可以使用@SessionAttribute注解来指定session属性的过期时间。但这种方法...

    JavaWeb 用session统计在线人数

    4. **session超时设置**:在web.xml中配置session的超时时间,比如30分钟无操作自动失效。这样,即使用户未主动注销,长时间不活动也会被认为是离线。 5. **展示在线人数**:在需要显示在线人数的页面上,可以通过...

    Session-JavaWeb专题

    默认情况下,如果一段时间内没有新的请求(例如 30 分钟),Session 将会过期。 - 用户也可以主动销毁 Session,例如通过调用 `invalidate()` 方法。 #### 二、Session在JavaWeb中的体现与操作 在 JavaWeb 开发中...

    JavaWeb基础-Cookie和Session的简单使用案例

    同时,为了增强安全性,可以定期刷新Session ID,或者设置合理的Session过期时间,避免长时间未操作的用户仍保持登录状态。 总结起来,Cookie和Session是JavaWeb开发中重要的用户会话管理工具,理解它们的工作原理...

    Javaweb-session和cookie笔记

    ### Javaweb-session和cookie笔记 #### 一、会话技术概述 在Web开发中,会话技术是一项非常重要的技术,它可以帮助我们追踪用户的活动并维持用户的状态信息。会话技术主要包括两种方式:Cookie技术和Session技术。...

    JavaWeb Session 会话管理实例详解

    开发者可以通过调用 `setMaxInactiveInterval(int interval)` 方法来设置Session的有效时间。如果用户关闭浏览器,通常会清除Cookie,相应的Session也会失效。但是,通过在URL中携带Session ID,可以在不同浏览器或...

    javaweb监听session

    本文将详细介绍如何在Java Web项目中设置和使用Session监听器,以及如何根据Session ID获取Session。 首先,为了实现Session监听,我们需要创建一个实现了`javax.servlet.http.HttpSessionListener`接口的类。这个...

    JavaWeb程序设计入门课件Session对象共9页.p

    及时清理不再需要的Session,或者设置合理的过期策略,防止过多Session占用服务器资源。 通过学习这9页的课件,开发者可以对JavaWeb中的Session有基本的理解,为后续的Web开发奠定坚实的基础。实践是检验真理的唯一...

    JavaWeb基于Session实现的用户登陆注销方法示例

    3. 生命周期:Cookie的生命周期可自定义,也可设置为浏览器关闭时失效;Session的默认生命周期为30分钟,服务器会定期检查是否过期,过期则自动销毁。 总结来说,基于Session的用户登录注销机制在JavaWeb中广泛使用...

    JavaWeb中Session对象的学习笔记

    - Cookie:可以设置生存时间,过期后自动删除。 - Session:服务器默认会设定一个超时时间,超过此时间未接收到用户请求,Session将被销毁。 三、Session实现原理 3.1、服务器如何为一个用户浏览器服务? ...

    JavaWeb培训讲义4

    此外,还可以使用`session.setMaxInactiveInterval()`来设置Session的过期时间。 #### JSP文件中设置Session范围内的共享数据 在JSP中设置Session范围的数据可以通过`session`对象来完成。例如,下面的代码展示了...

    javaWEB项目解决session不共享,一用见效,很详细

    - **过期策略**:设置合理的Session过期时间,避免Redis内存占用过大。 通过以上方法,我们可以有效地解决Java Web项目的Session不共享问题,提升系统的可用性和用户体验。在实际应用中,可以根据项目需求和资源...

    session的用法

    - **Session过期**:合理设置Session的超时时间,避免因长时间未活动导致的用户体验问题。 - **Session过多导致服务器压力**:过多的Session会占用服务器资源,可以通过集群和Session复制等方式分散压力。 - **...

    解决J2EE-session在浏览器关闭后失效问题

    Session可以通过两个方式失效:一是距离上一次使用该session的时间达到设置的失效时间,session失效;二是方法session.invalidate()被执行,主动使得session失效。 从上述内容可以看出,浏览器关闭后Session失效的...

    javaWeb 生成验证码程序

    8. **安全考虑**:为了增强安全性,验证码通常有有效期限制,例如在一段时间后过期,以防止被重复使用。此外,每次新的验证码请求都会使旧的验证码失效。 9. **用户体验**:虽然验证码的主要目的是安全,但也需要...

    JavaWeb基础总结

    此外,还可以通过`invalidate()`方法立即使Session失效。 #### 5. 表单提交 表单提交通常有两种方式:GET和POST。GET方式通常用于简单的查询操作,如搜索功能;而POST方式则用于数据提交操作,如登录或注册等。 `...

    javaWeb课件

    课程可能涵盖创建、获取和管理session,以及session超时和失效的处理。 4. **EL(Expression Language)与JSTL**: `8. 尚硅谷_JavaWEB_EL&JSTL.pdf` 提及了EL表达式语言和JSTL(JavaServer Pages Standard Tag ...

    javaweb 实现的图书管理系统

    若Session失效或丢失,用户将被重定向到登录页面。 2. **增删改查操作** - **添加图书**:用户可以输入新图书的相关信息(如书名、作者、出版社等),这些数据通过HTTP请求发送到服务器,服务器端处理并将其存储到...

Global site tag (gtag.js) - Google Analytics