当前位置:编程学习 > asp >>

Asp.Net实现在线用户列表显示实例代码详解

1、用文件记录,每次访问文件:死锁问题严重,资源耗费太大。
2、用数据库记录:访问损耗大。
3、用Global.asax和Timer实现统计:比较可取。
下面举个例子:

总的来说,要做个在线人数统计简单,但是要做在线名单并且保存用户的访问日志,就需要耗费比较多的系统资源,是否划算就难说了(我只看需求文档,其他不管...);

前面用过的IHttpModule方法也不错

using System;
using System.ComponentModel;
using System.Web;
using System.Web.SessionState;
using System.Data;
using System.Data.OleDb;

namespace Butterfly{
/// <summary>
/// Global 的摘要说明。
/// </summary>
public class Global : System.Web.HttpApplication
{
        private static System.Threading.Timer timer;
        private const int interval = 1000 * 60 * 10;//检查在线用户的间隔时间
       
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.IContainer components = null;

public Global()
{
InitializeComponent();
}

protected void Application_Start(Object sender, EventArgs e)
{
            if (timer == null)
                timer = new System.Threading.Timer(new System.Threading.TimerCallback(ScheduledWorkCallback),
                    sender, 0, interval);
            DataTable userTable = new DataTable();
            userTable.Columns.Add("UserID");//用户ID
            userTable.Columns.Add("UserName");//用户姓名
            userTable.Columns.Add("FirstRequestTime");//第一次请求的时间
            userTable.Columns.Add("LastRequestTime");//最后一次请求的时间
            userTable.Columns.Add("ClientIP");//
            userTable.Columns.Add("ClientName");//
            userTable.Columns.Add("ClientAgent");//
            //userTable.Columns.Add("LastRequestPath");//最后访问的页面
            userTable.PrimaryKey = new DataColumn[]{userTable.Columns[0]};
            userTable.AcceptChanges();
            Application.Lock();
            Application["UserOnLine"] = userTable;
            Application.UnLock();
}
 
protected void Session_Start(Object sender, EventArgs e)
{
        }
        protected void Application_BeginRequest(Object sender, EventArgs e)
{       
}

protected void Application_EndRequest(Object sender, EventArgs e)
{

}
        protected void Application_AcquireRequestState(Object sender, EventArgs e)
        {
            HttpApplication mApp = (HttpApplication)sender;
            if(mApp.Context.Session == null) return;
            if(mApp.Context.Session["UserID"]==null ) return;
            string userID = mApp.Context.Session["UserID"].ToString();
           
            DataTable userTable = (DataTable)Application["UserOnLine"];
            DataRow curRow = userTable.Rows.Find(new object[]{userID});
            if(curRow != null)
            {
                this.GetDataRowFromHttpApp(mApp,ref curRow);
            }
            else
            {
                DataRow newRow = userTable.NewRow();
                this.GetDataRowFromHttpApp(mApp,ref newRow);
                userTable.Rows.Add(newRow);
            }
            userTable.AcceptChanges();
            Application.Lock();
            Application["UserOnLine"] = userTable;
            Application.UnLock();
        }

protected void Application_AuthenticateRequest(Object sender, EventArgs e)
{        
}

protected void Application_Error(Object sender, EventArgs e)
{       
}
   
protected void Session_End(Object sender, EventArgs e)
{         
}

protected void Application_End(Object sender, EventArgs e)
{        
}

#region Web 窗体设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{   
            this.components = new System.ComponentModel.Container();
        }
#endregion

        private void GetDataRowFromHttpApp(HttpApplication mApp,ref DataRow mRow)
        {
            if(mApp.Context.Session == null) return;
            if(mApp.Context.Session["UserID"]==null || mApp.Context.Session["UserName"]==null) return;
            string userID = mApp.Context.Session["UserID"].ToString();
            string userName = mApp.Context.Session["UserName"].ToString();
            //string requestPath = mApp.Request.Path;
           
            if(mRow["UserID"].ToString().Length<1)
            {
            
补充:Web开发 , ASP.Net ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,