监听 session 判断用户是否在线

本文介绍了在 Spring Boot 项目中如何利用 Session 管理用户在线状态。当用户登录成功时,将用户 ID 存储在 Session 中,以便在有新消息时直接更新其 session 中的 newMessageFlag。通过实现 HttpSessionListener 接口监听 Session 的创建和销毁,从而在用户注销或 Session 失效时清除相关标志。同时,为了避免频繁监听 Session 属性变更,建议避免使用 HttpSessionAttributeListener。此外,讨论了 Session 独立存储和其它共享方案,以确保不同终端的 Session 数据互不影响。
摘要由CSDN通过智能技术生成

场景描述

spring boot 项目中为了简化消息模块,如果有新消息,先写入数据库,如果用户在线,设置接收消息用户的 session 中 newMessageFlag = true,前端每次轮询只需轮询 session 即可,无需每次访问数据库。
这里需要根据用户ID 获取session,所以用户登录成功,调用 put 方法,退出登录 或者session 失效,调用 remove。

session 容器

存储已登录用户的 session

public class LoggedUserSessionContext{
   
	//默认容量为 16 ,可以根据自己网站的访问量设置一个合理的初始值,避免刚开始时候的频繁扩容。
    private static Map<Integer, HttpSession> sessionMap  = new ConcurrentHashMap<>(128);

    public static HttpSession putIfAbsent(Integer userId, HttpSession session) {
   
    	//先前已经在某个客户端登录了,则返回那个 session,以实现多端登录session共享
	    return sessionMap.putIfAbsent(userId, session);        
    }

    public static void remove(Integer userId) {
   
        sessionMap.remove(userId);
    }
 
    public static HttpSession getSession(Integer userId) {
   
        return sessionMap.get(userId);
    }

}

添加 session

用户登录成功后执行以下代码段

HttpSession session = LoggedUserSessionContext.getSession(user.getId());
            if(session != null){
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值