zoukankan      html  css  js  c++  java
  • Java判断当前用户数及当前登录用户数工具类-session原理

     JavaWeb开发中,有时会遇到统计或管理用户登录数或者当前在线多少用户,分别都是谁的情况。当然,实现途径多种多样。下面列举一下通过session实现的一种统计。

    public class MySessionListener implements HttpSessionListener {
     
       /**
        * 创建session
        */
       @SuppressWarnings({ "rawtypes", "unchecked" })
       public void sessionCreated(HttpSessionEvent event) {
          HttpSession session = event.getSession();
          ServletContext application = session.getServletContext();
          
          // 在application范围由一个HashSet集保存所有的session
          HashSet sessions = (HashSet) application.getAttribute("sessions");
          if (sessions == null) {
                 sessions = new HashSet();
                 application.setAttribute("sessions", sessions);
          }
          
          // 新创建的session均添加到HashSet集中
          sessions.add(session);
          // 可以在别处从application范围中取出sessions集合
          // 然后使用sessions.size()获取当前活动的session数,即为“在线人数”
       }
     
       /**
        * 销毁session
        */
       @SuppressWarnings("rawtypes")
       public void sessionDestroyed(HttpSessionEvent event) {
          HttpSession session = event.getSession();
          ServletContext application = session.getServletContext();
          HashSet sessions = (HashSet) application.getAttribute("sessions");
          
          // 销毁的session均从HashSet集中移除
          sessions.remove(session);
       }
       
       /**
        * 获取系统在线用户数及登录用户数
        * @param request 当前请求对象
        * @param flag=1当前在线用户数   flag=2当前登录用户数
        * @return
        */
       @SuppressWarnings("rawtypes")
       public static int getMaxUser(HttpServletRequest request,int flag){
            HttpSession session = request.getSession();
            ServletContext application = session.getServletContext();
            HashSet sessions=(HashSet)application.getAttribute("sessions");
            int countUser = sessions.size();
    //        System.out.println("###################当前在线人数:"+sessions.size());
    //        String onlineuser = "";
            int countOnlineUser = 0;
            for(Iterator it = (Iterator) sessions.iterator(); it.hasNext();){
                HttpSession se = (HttpSession) it.next();
                if(se!=null){
                    UserInfo ui = (UserInfo) se.getAttribute("USER_INFO");
                    if(ui!=null){
    //                    onlineuser += "___"+ui.getName();
                        countOnlineUser++;
                    }
                }
            }
    //        System.out.println("###################当前登录用户:"+onlineuser);
            return flag==1?countUser:countOnlineUser;
       }
     
  • 相关阅读:
    jquery select取值,赋值操作
    数据库性能监测工具
    Redis集群搭建与简单使用
    Docker安装指南
    yum常用操作
    centos6.8 安装Python2.7后, yum出现“No module named yum”错误
    Docker使用阿里云docker镜像加速
    高并发缓存架构
    mysql主从复制-方案1
    redis队列操作
  • 原文地址:https://www.cnblogs.com/dreamzhiya/p/5466831.html
Copyright © 2011-2022 走看看