java session 统计在线人数,监听session的创建和销毁

发布时间:2018-03-22作者:laosun阅读(2772)

java

如果你想用session统计一个在线人数等功能的话,那么这篇文章你就看对了,可以监听session的创建和销毁,至于其他功能你就可以随意的去写了

    session监听可以监听到session的创建和销毁等操作,如果需要去做在线人数统计,那么需要这两个就足够了。

    创建session监听类

    package com.sunjs.commons;
    //                         _ooOoo_  
    //                        o8888888o  
    //                        88" . "88  
    //                        (| -_- |)  
    //                         O\ = /O  
    //                     ____/`---'\____  
    //                   .   ' \\| |// `.  
    //                    / \\||| : |||// \  
    //                  / _||||| -:- |||||- \  
    //                    | | \\\ - /// | |  
    //                  | \_| ''\---/'' | |  
    //                   \ .-\__ `-` ___/-. /  
    //                ___`. .' /--.--\ `. . __  
    //             ."" '< `.___\_<|>_/___.' >'"".  
    //            | | : `- \`.;`\ _ /`;.`/ - ` : | |  
    //              \ \ `-. \_ __\ /__ _/ .-` / /  
    //      ======`-.____`-.___\_____/___.-`____.-'======  
    //                         `=---='  
    //
    //      .............................................  
    //               佛祖保佑             永无BUG 
    //       佛曰:  
    //               写字楼里写字间,写字间里程序员;  
    //               程序人员写程序,又拿程序换酒钱。  
    //               酒醒只在网上坐,酒醉还来网下眠;  
    //               酒醉酒醒日复日,网上网下年复年。  
    //               但愿老死电脑间,不愿鞠躬老板前;  
    //               奔驰宝马贵者趣,公交自行程序员。  
    //               别人笑我忒疯癫,我笑自己命太贱;  
    //               不见满街漂亮妹,哪个归得程序员? 
    
    import javax.servlet.http.HttpSessionEvent;
    import javax.servlet.http.HttpSessionListener;
    
    import org.apache.log4j.Logger;
    
    /**
     * session 监听
     * @author sun
     */
    public class SessionListener implements HttpSessionListener {
        
        protected static final Logger LOG = Logger.getLogger(SessionListener.class);
    
        @Override
        public void sessionCreated(HttpSessionEvent event) {
            //创建session的时候可以监听到
        }
        
        @Override
        public void sessionDestroyed(HttpSessionEvent event) {
    //        HttpSession session = event.getSession();
    //        String sessionId = session.getId();
                //session销毁的时候可以监听到
        }
    
    }


    web.xml 需要配置listener节点

    <listener>
        <listener-class>com.sunjs.commons.SessionListener</listener-class>
    </listener>

    完成,此时session已经可以监听了。

    如果你想做一个在线人数统计,那么只需要在创建和销毁的操作内存中的数据即可,redis、memcache或者系统内的map都可以。

    我写了个简单的例子

    public static final Map<String, MpSession> sessionMap = new HashMap<String, MpSession>();

    创建实体pojo MpSession

    private TRbacUser user;// 登录用户信息
    private String loginTime;// 登录时间
    private String totalTime;// 在线时长
    private String loginIp;// 登录ip
    private String sessionId;// session唯一id
    private HttpSession session;// session信息
    
    //取set get方法


    public void sessionDestroyed(HttpSessionEvent event) {
        HttpSession session = event.getSession();
        String sessionId = session.getId();
        Set<String> keyset = CommonUtils.sessionMap.keySet();
        Iterator<String> it = keyset.iterator();
        while (it.hasNext()) {
            String key = it.next();// 用户名
            MpSession mps = CommonUtils.sessionMap.get(key);
            if (mps != null && !StringUtils.isEmpty(mps.getSessionId())) {
                if (mps.getSessionId().equals(sessionId)) {
                    // 匹配到cache中存在这个sessionid, 去除
                    CommonUtils.sessionMap.remove(key);// 内存cache中删除
                    //记录自动退出日志
                    break;
                }
            }
        }
    }


    就这么简单,看不明白或者没搞懂的朋友们,可以在下方给我留言!!!


3 +1

版权声明

 Java  源码

 请文明留言

0 条评论