`

session详细解析(是否过期、失效时间)

阅读更多

Session一直是我们做web项目经常使用的,以前没太注意,这次又细致的看了下!

 

1.session其实就是一个Map,键=值对,通过session.getAttribute("name");获得session中设置的参数

 

2.session的过期时间是从什么时候开始计算的?是从一登录就开始计算还是说从停止活动开始计算?

   答:从session不活动的时候开始计算,如果session一直活动,session就总不会过期。

         从该Session未被访问,开始计时; 一旦Session被访问,计时清0;

 

3.设置session的失效时间

 a)web.xml中

 

<session-config>  
    <session-timeout>30</session-timeout>  
</session-config> 

 b)在程序中手动设置

    session.setMaxInactiveInterval(30 * 60);//设置单位为秒,设置为-1永不过期

c)tomcat也可以修改session过期时间,在server.xml中定义context时采用如下定义:

<Context path="/livsorder" docBase="/home/httpd/html/livsorder"
  defaultSessionTimeOut="3600" isWARExpanded="true"
  isWARValidated="false" isInvokerEnabled="true"
  isWorkDirPersistent="false"/>

 

4.如何判断session过没过期

 1.以前是根据 if(session.getAttribute('user')==null)判断是否为空

=========================================================================================

 2.如下为看到的一个帖子,判断session不为空的好方法:

request.getSeesion(boolean)方法,一下子让我恍然大悟。这个方法里面传了一个boolean值,这个值如果是true,那么如果当前的request的session不可用,那么就创建新的会话,如果存在就返回当前的会话。如果参数是false,那么在request的当前会话不存在的时候就返回null。
这样我们就可以很容易的联想到这个所谓的request的当前会话是否存在和session过期的联系,所以我们就可以“近似地”认为session不存在就是session过期了,那么我们就可以很容易地判断session是否过期了。方法如下:

if(request.getSession(false)==null)
System.out.println("Session has been invalidated!");
else
System.out.println("Session is active!");

可能大家注意到我上面有一个“近似地”字眼,也就是说存在特别情况。
这个特殊情况就是第一次请求还没有创建会话的时候,那么用这个方法返回的仍然是null,原因我想大家应该是显然的。

也有很多人觉得应该使用javax.servlet.http.HttpSessionBindingListener接口来实现类似功能。
他们的意思是当session创建的时候session.setAttribute("isActive","yes");只要session没有过期,那么我们就可以session.getAttribute("isActive")==null来判断,但是我们如果在过期以后就不能用这个办法了,因为我们使用过期的session.getAttribute()方法就会抛出java.lang.IllegalStateException,这时候我们就只能通过捕捉这个异常来进行判断,这就会打乱我们整个程序的逻辑流程。
当然我们也可以在session过期的时候这样处理,在HttpSessionBindingListener接口的onValueUnbound()方法里面通过设置一个flag来标志session已过期,之后盘都都使用这个flag,那么这个flag一定是要放在application里面,application是HttpServletContex类的对象,所以我们必须对这个flag加入是哪个session过期的信息,这样一来整个的过程就十分麻烦。
关于用监听器实现我要补充一点,我的方法是站在某一个session的角度来实现的。如果说要监测多个session就应该站在application的角度来分析,这时候的最佳选择就是HttpSessionBindingListener或者HttpSessionListener
写这个帖子的目的就是让大家在需要判断的时候(不管session是否过期都OK)用这样的一条语句来简单的实现功能,至于意义我们姑且不谈。

 

分享到:
评论

相关推荐

    session失效

    #### Session失效时间概念解析 Session失效是指当一个Session因过期或被主动销毁而无法继续使用的情况。在实际应用中,Session的生命周期可以通过设置最大非活动间隔(Max Inactive Interval)来控制。该参数定义了...

    session过期处理

    2. **检测Session过期**:服务器通常有两种方式检查Session是否过期。一是设置Session监听器,监听Session的销毁事件;二是每次接收到请求时,检查Session的有效性,如果过期则进行处理。 3. **Session过期后的处理...

    JS之Session超时提示代码

    本文详细解析了一个基于JavaScript实现的Session超时提示逻辑,通过监测用户的鼠标点击行为来判断用户的活跃状态,并在Session即将过期时给予提示,从而提高了用户体验。此方法简单实用,适用于那些希望减少服务器...

    用django设置session过期时间的方法解析

    本篇文章将详细介绍如何在Django中设置Session的过期时间。 首先,Django默认的Session过期时间是在用户关闭浏览器时,这可以通过`SESSION_EXPIRE_AT_BROWSER_CLOSE`设置控制。默认情况下,这个值为False,意味着...

    Django rstful登陆认证并检查session是否过期代码实例

    例如,可以在CustomAuth类中实现检查session是否过期的逻辑,并根据需要抛出相应的异常。 知识点六:检查session过期 在Web应用中,维护用户会话的有效性是认证机制的一部分。session过期检查通常由Django框架提供...

    (转)讲解各种session

    Session有默认的过期时间,如Java的HttpSession默认为30分钟,超过这个时间未收到客户端的请求,Session将被自动销毁。开发者也可以自定义Session的存活时间。 **不同编程语言中的Session**: 1. **Java**:在...

    验证码的session问题

    1. **Session过期**:如果用户在一段时间内没有操作,Session可能会因为超时而被服务器清理,导致验证码失效。开发者需要设置合理的Session超时时间,并处理Session过期后的用户体验,例如提示用户重新获取验证码。 ...

    cookie和session示例

    接下来,我们将详细探讨Cookie和Session的工作原理、特点以及如何在实际应用中使用它们。 一、Cookie 1. 工作原理: Cookie是由服务器端发送到客户端(浏览器)的一小段文本信息,当客户端后续向服务器发送请求时...

    实现session身份认证机制

    6. **处理session过期**:默认情况下,session会在浏览器关闭时失效。若需更长的会话时间,可设置`cookie.maxAge`来指定session的有效期。 ```javascript app.use(session({ ..., cookie: { maxAge: 3600000 },...

    解析PHP的session过期设置

    【PHP的Session过期设置解析】 在PHP中,Session是一种持久化存储用户状态的方法,它在服务器端存储用户数据,并通过一个唯一标识符(Session ID)在客户端进行识别。理解PHP Session的过期机制对于优化网站用户...

    基于ZooKeeper的分布式Session实现

    当Session过期或被删除时,ZooKeeper会通知所有关注该节点的服务器,从而实现Session的自动失效。 4. **负载均衡**: 分布式Session的另一个挑战是如何在多台服务器间均匀分配用户请求。通过结合负载均衡器,...

    优惠券有效期

    本文将围绕“优惠券有效期”的核心内容进行详细解析,包括如何判断优惠券是否过期以及时间比较的方法。 #### 二、核心知识点分析 ##### 2.1 判断优惠券是否过期 在判断优惠券是否过期的过程中,主要涉及以下几个...

    cookieAndsession.zip

    2. **生命周期**:Session也有生命周期,服务器可以设置过期时间,过期后Session将被清除。 3. **安全性**:Session比Cookie更安全,因为数据存储在服务器端,不会暴露给客户端。 4. **负载均衡**:在多服务器环境下...

    阿里P7大牛实战演练到源码透析——分布式环境session丢失爬坑记

    3. **会话过期或被清理:** 服务器可能会因为长时间未收到客户端请求而自动清除Session,或者由于某些异常情况(如服务器重启)导致Session数据丢失。 4. **客户端Cookie禁用或失效:** 客户端浏览器设置问题或网络...

    关于Session和Cookie的一个PPT

    **标题解析:** "关于Session和Cookie的一个PPT" 指的是一个关于网络应用程序中的会话管理和状态跟踪技术的演示文稿。Session和Cookie是Web开发中的关键概念,用于在用户与服务器之间保持状态。 **描述分析:** ...

    Session Cookie

    - **Session Cookie** 随着浏览器的关闭而失效。 - **Persistent Cookie** 有一个明确的过期时间,即使浏览器关闭也会保留一段时间。 4. **安全性**: - **Session** 因为数据存放在服务器端,相对来说更安全。 ...

    Application、Session、Cookie、ViewState、Cache、Hidden的区别

    - **作用域和保存时间**:作用于单个用户的会话期间,一般在用户无操作后20分钟会自动失效。 - **应用范围**:针对单个用户,适用于需要跨页面保持状态的应用场景。 - **保存位置**:服务器端。 - **注意事项**:...

    login for cookie or session or token

    - **持久性**:Cookie可以设置为持久化,即使浏览器关闭后仍保留,而Session和Token通常在会话结束时失效。 - **状态管理**:Cookie需要服务器记住每个用户的会话,而Token则可以实现无状态服务器。 - **跨域支持**...

    Django 5种类型Session使用方法解析

    SESSION_EXPIRE_AT_BROWSER_CLOSE = False # 是否关闭浏览器使得Session过期(默认) SESSION_SAVE_EVERY_REQUEST = False # 是否每次请求都保存Session,默认修改之后才保存(默认) ``` - **使用**: ```...

Global site tag (gtag.js) - Google Analytics