如何处理多人同时登录同一个账号以及如何统计在线人数和访问量?

来源:互联网 发布:卡牌游戏推荐 知乎 编辑:程序博客网 时间:2024/04/29 18:25

话不多说直接贴代码

public class SessionListener implements HttpSessionListener {    // 保存session和username的映射    private static HashMap hUserName = new HashMap();    private int MaxSession;    private int activeSession;    public void sessionCreated(HttpSessionEvent se) {        addSession();    }    public void sessionDestroyed(HttpSessionEvent se) {        delSession();        hUserName.remove(se.getSession().getId());    }    /**     * 判断用户是否已经登录及处理方法     * @author FuYuwei     * @time 2014-9-19 下午07:57:39     * @param session     * @param sUserName 登录名     * @return 用户是否已经登录的标志     */    public static boolean isAlreadyEnter(HttpSession session,String sUserName){        boolean flag = false;        // 如果该用户已经登录过,则使用上次登录的用户掉线        if(hUserName.containsValue(sUserName)){            flag = true;            // 遍历原来的hUserName,删除原来用户名对应的sessionId,即删除原来的sessionId和username            Iterator iter = hUserName.entrySet().iterator();            while(iter.hasNext()){                Map.Entry entry = (Map.Entry)iter.next();                Object key  = entry.getKey();                Object val = entry.getValue();                if(((String)val).equals(sUserName)){                    hUserName.remove(key);                }            }            // 添加当前用户的sessionId和username            hUserName.put(session.getId(), sUserName);        }        // 如果没有登录直接添加当前用户的sessionId和username        else{            flag = false;            hUserName.put(session.getId(),sUserName);        }        return flag;    }    /**     * 判断用户是否在线     * @author FuYuwei     * @time 2014-9-19 下午08:11:00     * @param session     * @return     */    public static boolean isOnline(HttpSession session){        boolean flag = true;        if(hUserName.containsValue(session.getId())){            flag = true;        }        else{            flag = false;        }        return flag;    }    /**     * OnlineSessionListener监听器(实现HttpSessionListener)接口来实现页面在线访问人数统计,     * 当有用户访问到页面就会创建一个session,此时会触发public void sessionCreated(HttpSessionEvent se)方法,     * 如果session失效,此时会触发public void sessionDestroyed(HttpSessionEvent se)方法。     * 在此方法里我们用OnlineList进行在线访问人数的统计     * @author FuYuwei     * @time 2014-9-19 下午08:31:28     */    public void addSession(){        activeSession++;        if(activeSession>=MaxSession){            MaxSession = activeSession;        }    }    public void delSession(){        if(activeSession>0){            activeSession--;        }    }    /**     * 获取在线人数     * @author FuYuwei     * @time 2014-9-20 下午03:36:58     * @return     */    public int getActiveNum(){        return activeSession;    }    /**     * 获取累计访问人数     * @author FuYuwei     * @time 2014-9-20 下午03:37:30     * @return     */    public int getMaxSessionNum(){        return MaxSession;    }}

在Web.xml中配置监听如下:

<!-- 监听session --> <listener>    <listener-class>com.think.SessionListener</listener-class> </listener>
1 0
原创粉丝点击