JSP解决session过期时写入数据库操作

本文介绍了一种在用户注销或Session超时时记录用户状态的方法。通过实现HttpSessionListener接口,在sessionDestroyed方法中更新数据库,记录用户的注销时间。适用于J2EE应用服务器环境。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

 

背景如下:

    希望实现当用户点击 jsp 页面上的注销按钮时实现在数据库中保存用户注销的时间。另外如果用户没有正常退出,则在 session 超时时自动记录超时时候的时间。

    仿照找到的关于利用 HttpSessionListener 实现在线人数统计的方法来处理:

    对每一个正在访问的用户, J2EE 应用服务器会为其建立一个对应的 HttpSession 对象。当一个浏览器第一次访问网站的时候, J2EE 应用服务器会新建一个 HttpSession 对象,并触发 HttpSession 创建事件,如果注册了 HttpSessionListener 事件监听器,则会调用 HttpSessionListener 事件监听器的 sessionCreated 方法。相反,当这个浏览器访问结束超时的时候, J2EE 应用服务器会销毁相应的 HttpSession 对象,触发 HttpSession 销毁事件,同时调用所注册 HttpSessionListener 事件监听器的 sessionDestroyed 方法。
   
可见,对应于一个用户访问的开始和结束,相应的有 sessionCreated 方法和 sessionDestroyed 方法执行。因此,我们只需在 HttpSessionListener 实现类的 sessionDestroyed 方法中让其执行数据库的更新操作就可以了。

    下面是示例代码:

package libms.session;

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

import libms.service.UserServiceImpl;

public class UserOnlineListener implements HttpSessionListener {
private static long userId = 0;

public static void setUserId(long id) {
   userId = id;
}

public void sessionCreated(HttpSessionEvent event) {
}

public void sessionDestroyed(HttpSessionEvent event) {
   if (userId > 0) {
    // 这里写更新数据库的操作
   }
}
}
 

 

web.xml 文件中注册一个监听器:

<web-app>
    ……
    <listener>
        <listener-class>
            com.online.OnlineCountListener
        </listener-class>
    </listener>
    ……
</web-app>
 

在用户登录的时候,把用户的 id 使用 UserOnlineListener .setUserId (id) 的方法保存下来。当用户点击注销按钮的时候,调用 session.invalidate () 的方法清空 session ,就会触发监听器 sessionDestroyed(HttpSessionEvent event) 方法了,同样,如果用户非正常退出,则在 session 超时的时候,也会出发该方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值