实现单用户登陆session先进先出(session踢出)

首先在系统增加sessionListener 来监听session 并做并做session保存 创建Class OnlineUserListener implements HttpSessionListener
implements HttpSessionListener  需要实现两个方法:

一个是  sessionCreated  session的创建事件;

一个是sessionDestroyed session的销毁事件;


以下是代码:

public static HashMap sessionMap = new HashMap();
        public void sessionCreated(HttpSessionEvent event) {
                // TODO Auto-generated method stub
                HttpSession session = event.getSession();
                // 初始化当前session
                sessionMap.put(session.getId(), session);
        }

        public void sessionDestroyed(HttpSessionEvent event) {

                HttpSession session = event.getSession();

                // 判断当前session user是否有值
                if (session.getAttribute("user") != null
                                && session.getAttribute("user").toString().length() > 0) {
                        // session销毁清空map 更新map
                        sessionMap.remove(session.getAttribute("user").toString());
                        session.invalidate();
                }
        }

 

需要在web.xml增加监听

<listener>
        <listener-class>com.test.demo.OnlineUserListener</listener-class>
</listener>

 

public static HashMap sessionMap = new HashMap();  全局 静态的map  保存的key=sessionId  value=session  当前的会话ID是一致的所用使用sessionID做key 故可以在我们的action 或servlet 里面 根据当前sessionID 替换为当前用户登录的user 对象 故当前用户登录时,可通过在map中寻找值来判断当前用户是否已在系统中; 一下是单用户登录跟踢出的操作代码:

String username = request.getParameter("username");
                //String password = request.getParameter("password");
                HttpSession session = request.getSession();

                if (OnlineUserListener.sessionMap.get(username.trim()) != null
                                && OnlineUserListener.sessionMap.get(username.trim())
                                                .toString().length() > 0) {
                        // 当前用户已经在线 删除用户
                        HttpSession sessionold = (HttpSession) OnlineUserListener.sessionMap.get(username.trim());
                        // 注销已在线用户session
                        sessionold.invalidate();
                        OnlineUserListener.sessionMap.remove(username.trim());
                        // 清除已在线用户,更新map key 当前用户 value session对象
                        OnlineUserListener.sessionMap.put(username.trim(), session);
                        OnlineUserListener.sessionMap.remove(session.getId());
                } else {
                        // 根据当前sessionid 取session对象。 更新map key=用户名 value=session对象 删除map
                        // key= sessionid
                        OnlineUserListener.sessionMap.get(session.getId());
                        OnlineUserListener.sessionMap.put(username.trim(),OnlineUserListener.sessionMap.get(session.getId()));
                        OnlineUserListener.sessionMap.remove(session.getId());
                }

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值