ASP.NET 实现统计在线人数

本文介绍了一种通过使用隐藏的iframe元素和JavaScript定时刷新技术来实现实时更新用户在线状态的方法,并通过定期清理长时间未更新状态的用户记录来维护数据库的准确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在网上查了很多资料,有说到用iframe定时刷新来实现,我试着做了一个,感觉还不错。

1、首先需要在页面中添加<iframe style="display:none" id="ifr" src="User/Refresh.aspx"></iframe>使其隐藏,

Refresh.aspx负责往数据库中添加新用户并每3秒刷新一次来改变登入用户的最后时间。

在Refresh.aspx页面中添加

    <script type="text/javascript">
    setInterval('location.reload()',3000);  
    </script>

使页面每3秒刷新一次。

在Refresh.aspx.cs page_load函数中

      string s = "-1";//-1为游客

       if (this.Session["onlineid"] == null)//当用户刚登录时
        {
           string str = "insert into Map_online(userid) values("+s+"); select IDENT_CURRENT('Map_online')";
           this.Session["onlineid"] = ExecuteSql(str);//执行sql语句并返回id
        }
        else//当刷新页面时
        {
            string strSql = "update Map_online set lastdate='" + DateTime.Now + "' where id=" +      this.Session["onlineid"];//每3秒改一次最后登入时间
            ExecuteSql(strSql);
        }

 

2、登入的用户最后登入时间是不断的在刷新并与当前时间区别不大,当用户离开页面后最后登入时间停止刷新

所以用另一页面删除离开页面的用户。

同样在页面中添加<iframe style="display:none" src="User/RefData.aspx"></iframe>使其隐藏,

在RefData.aspx中添加

    <script type="text/javascript">
    setInterval('location.reload()',120000);   
    </script>

每两分钟清理一次数据库

在RefData.aspx.cs中

    protected void Page_Load(object sender, EventArgs e)
    {
        string strSql = "select * from Map_online";
        SqlDataReader sdr = ExecuteDataTable(strSql);
        while (sdr.Read())

        {
            int i = DateTime.Now.CompareTo(Convert.ToDateTime(sdr["lastdate"].ToString()).AddSeconds(10));
            if (i > 0)//数据未能及时更新
            {
                strSql = "delete from Map_online where id=" + sdr["id"].ToString();
                ExecuteSql(strSql);
            }
        }
 
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值