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;
       }
     
  • 相关阅读:
    Web Workers 的基本信息
    关于前端框架的一些观点
    解密jQuery内核 DOM操作方法(二)html,text,val
    解密jQuery内核 DOM操作
    解密jQuery内核 DOM操作的核心buildFragment
    解密jQuery内核 DOM操作的核心函数domManip
    前端MVC框架Backbone 1.1.0源码分析(二)
    前端MVC框架Backbone 1.1.0源码分析(一)
    解密jQuery内核 Sizzle引擎筛选器
    解密jQuery事件核心
  • 原文地址:https://www.cnblogs.com/dreamzhiya/p/5466831.html
Copyright © 2011-2022 走看看