Chinaunix首页 | 论坛 | 博客
  • 博客访问: 241361
  • 博文数量: 43
  • 博客积分: 391
  • 博客等级: 二等列兵
  • 技术积分: 352
  • 用 户 组: 普通用户
  • 注册时间: 2012-05-17 11:29
个人简介

现在的我,不埋怨谁,不嘲笑谁,也不羡慕谁。阳光下灿烂,风雨中奔跑,做自己的梦,走自己的路。一切都好,真的,都很好。

文章分类

全部博文(43)

文章存档

2018年(2)

2017年(1)

2015年(2)

2014年(27)

2013年(1)

2012年(10)

我的朋友

分类: Java

2014-08-09 11:41:08

1、建一个session监听类
         public class SessionListener implements HttpSessionListener{
         public static HashMap sessionMap = new HashMap();
         public void sessionCreated(HttpSessionEvent hse) {
                   HttpSession session = hse.getSession();
         }
         public void sessionDestroyed(HttpSessionEvent hse) {
                   HttpSession session = hse.getSession();
                   this.DelSession(session);
         }
          public static synchronized void DelSession(HttpSession session) {
                     if (session != null) {
                            // 删除单一登录中记录的变量
                                     if(session.getAttribute("users")!=null){
                                               TblUser tu =  (TblUser)session.getAttribute("users");
                                               SessionListener.sessionMap.remove(tu.getUserID());     
                                     }
                     }
         }
 
}
2、登录调用的方法
public ResultObject updateUserLoginAjax(HttpSession session ,String uname,String upwd )throws Exception{


//用户名及密码的判断省略
// 1.实现单一登录 踢人效果
                   if ( null != SessionListener.sessionMap.get(tu.getUserID())) {   
                            //第一次登录的用户session销毁
                            //将第一次登录用户的信息从map中移除
                            BaseAction.forceLogoutUser(tu.getUserID());
                            //本次登录用户添加到map中                                                                    
                            SessionListener.sessionMap.put(tu.getUserID(), session);                                                                               
                   } else{      
                            //以用户id为key键存入map中,以判断下一次登录的人
                            SessionListener.sessionMap.put(tu.getUserID(), session);
                   }
}


3、2步骤中BaseAction中调用的forceLogoutUser()的方法
    /**
     *
     * @author 
     * @params uid 要强行退出的用户的ID
     * @return
     * @description 通过用户ID来强行把已经在线的用户的登录信息
     */
         @SuppressWarnings("unchecked")
         public static void forceLogoutUser(Long uid) {
                   // 删除单一登录中记录的变量
                   if (SessionListener.sessionMap.get(uid) != null) {
HttpSession hs = (HttpSession) SessionListener.sessionMap.get(uid);
                            SessionListener.sessionMap.remove(uid);
                            Enumeration e = hs.getAttributeNames();
                            while (e.hasMoreElements()) {
                                     String sessionName = (String) e.nextElement();
                                     // 清空session
                                     hs.removeAttribute(sessionName);
                            }
                            // hs.invalidate();
                   }
         }

阅读(8371) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~

who77082015-08-18 00:41:14

爱你心太软500:麻烦高手们大神们下次写文章的时候写完整点详细点吧,要是人家懂了还看你们这些半截文章搓球啊

一般看这样的基本都有一定的基础

回复 | 举报

爱你心太软5002015-04-07 14:43:14

麻烦高手们大神们下次写文章的时候写完整点详细点吧,要是人家懂了还看你们这些半截文章搓球啊