请选择 进入手机版 | 继续访问电脑版

马上加入IBC程序猿 各种源码随意下,各种教程随便看! 注册 每日签到 加入编程讨论群

C#教程 ASP.NET教程 C#视频教程程序源码享受不尽 C#问题入口 ASP.NET问题入口

【C#问题提交】 社群合作 申请版主 程序开发 【远程协助】 每天乐一乐 每日签到 【承接毕业设计】 面试-葵花宝典下载

官方一群:

官方二群:

查看: 2451|回复: 2

ASP.NET在线会员实时显示统计

[复制链接]
  • TA的每日心情
    开心
    7 天前
  • 签到天数: 1555 天

    [LV.Master]伴坛终老

    4248

    主题

    6169

    帖子

    10万

    积分

    管理员

    IBC编程社区-原道楠

    Rank: 9Rank: 9Rank: 9

    积分
    107801

    推广达人突出贡献优秀版主荣誉管理论坛元老

    发表于 2015-7-16 10:22:27 | 显示全部楼层 |阅读模式

    马上加入IBC,查看更多教程

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    【转载,这篇教程实现方法并不是很好,而且说的是登录和注销统计用户,并不是访问页面就统计,而且一般人登录网站后是不会点击注销的,会直接关闭页面,这时候会牵扯到发送心跳包,不过这就复杂了,之所以转载这篇帖子,是给小网站及初学者看的】
    在最近的学习中,参考其他资源,做了一个简单的在线人员显示的功能,总结了一下,思路如下:

    1、定义一个全局的内存来作为在线人员列表

    2、通过实时判断用户Session值,来判断某个用户的登录或离线

    3、对于用户的上线和离线,通过添加用户到内存中,或删除内存中的用户列表中的用户来实现

    下面是实现该功能的类:

    [C#] 纯文本查看 复制代码
    public static class UserOnline
    {
        /// <summary>
        /// 获取或设置在线列表
        /// </summary>
        public static Hashtable OnlineUserList
        {
            get
            {
                if (HttpContext.Current.Application["OnlineUserList"] == null)
                {
                    Hashtable onlineUserList = new Hashtable();
                    HttpContext.Current.Application["OnlineUserList"] = onlineUserList;
                }
    
                return (Hashtable)HttpContext.Current.Application["OnlineUserList"];
            }
            set
            {
                HttpContext.Current.Application["OnlineUserList"] = value;
            }
        }
    
        /// <summary>
        /// 添加在线成员
        /// </summary>
        public static bool OnlineUserList_Add(string key, string value)
        {
            try
            {
                if (OnlineUserList.Contains(key))
                    OnlineUserList[key] = value;
                else
                    OnlineUserList.Add(key, value);
                return true;
            }
            catch
            {
                return false;
            }
        }
    
        /// <summary>
        /// 添加在线成员
        /// </summary>
        public static bool OnlineUserList_Add(string key)
        {
            string value = DateTime.Now.ToString();
            return OnlineUserList_Add(key, value);
        }
    
        /// <summary>
        /// 离线删除用户
        /// </summary>
        public static bool OnlineUserList_Delete(string key)
        {
            bool re = false;
            if (OnlineUserList.Contains(key))
            {
                Hashtable userList = OnlineUserList;
                userList.Remove(key);
                OnlineUserList = userList;
                return true;
            }
            return re;
        }
    
        /// <summary>
        /// 判断用户是否在线
        /// </summary>
        public static bool UserIsOnline(string adminName)
        {
            OnlineClearUserOutTimeInOnLineList();
            return OnlineUserList.Contains(adminName) ? true : false;
        }
    
        /// <summary>
        /// 删除超时在线用户
        /// </summary>
        public static void OnlineClearUserOutTimeInOnLineList()
        {
            int OnlineTimeOut = 20;
            Hashtable list = new Hashtable();
            Hashtable temList = new Hashtable();
            list = OnlineUserList;
            temList = new Hashtable(list);
            foreach (DictionaryEntry de in temList)
            {
                //删除超时
                DateTime onlineTime = Convert.ToDateTime(de.Value);
                TimeSpan timeSpan = DateTime.Now - onlineTime;
    
                //在线时间和当前时间间隔大于超时分钟数就删除(注:用户非法关闭浏览器)
                if (timeSpan.TotalMinutes >= (double)OnlineTimeOut)
                {
                    list.Remove(de.Key);
                }
    
            }
    
            OnlineUserList = list;
        }
    
    }



    在用户登录成功的时候,添加改用户的惟一值到内存列表中

    该用户的Session结束前进行删除即可。

    C#论坛 www.ibcibc.com IBC编程社区
    C#
    C#论坛
    IBC编程社区
  • TA的每日心情
    奋斗
    2016-7-25 10:19
  • 签到天数: 10 天

    [LV.3]偶尔看看II

    1

    主题

    32

    帖子

    362

    积分

    中级会员

    Rank: 3Rank: 3

    积分
    362
    发表于 2015-7-16 10:25:07 | 显示全部楼层
    沙发
  • TA的每日心情
    慵懒
    2019-4-1 14:07
  • 签到天数: 62 天

    [LV.6]常住居民II

    1

    主题

    31

    帖子

    1783

    积分

    金牌会员

    Rank: 6Rank: 6

    积分
    1783
    发表于 2015-7-16 10:27:17 | 显示全部楼层
    火前留名。。。
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则