繁体中文
设为首页
加入收藏
当前位置:.Net技术首页 >> Asp.Net开发 >> Application的一个典型应用(在线统计)

Application的一个典型应用(在线统计)

2007-09-15 08:00:00  作者:  来源:互联网  浏览次数:0  文字大小:【】【】【
简介:总的来说,要做个在线人数统计简单,但是要做在线名单并且保存用户的访问日志,就需要耗费比较多的系统资源,是否划算就难说了(我只看需求文档,其他不管...); 前面用过的IHttpModule方法也不错 using Syst...

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

前面用过的IHttpModule方法也不错

using System;

using System.ComponentModel;

using System.Web;

using System.Web.SessionState;

using System.Data;

using System.Data.OleDb;

namespace XsExam

{

///

/// Global 的摘要说明。

///

public class Global : System.Web.HttpApplication

{

private static System.Threading.Timer timer;

private const int interval = 1000 * 60 * 10;//检查在线用户的间隔时间

///

/// 必需的设计器变量。

///

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 窗体设计器生成的代码

///

/// 设计器支持所需的方法 - 不要使用代码编辑器修改

/// 此方法的内容。

///

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)

{

mRow["UserID"] = userID;

mRow["UserName"] = userName;

mRow["FirstRequestTime"] = System.DateTime.Now;

mRow["ClientIP"] = mApp.Context.Request.UserHostAddress;

mRow["ClientName"] = mApp.Context.Request.UserHostName;

mRow["ClientAgent"] = mApp.Context.Request.UserAgent;

}

mRow["LastRequestTime"] = System.DateTime.Now;

//mRow["LastRequestPath"] = requestPath;

}

private void ScheduledWorkCallback (object sender)

{

string filter = "Convert(LastRequestTime,'System.DateTime') < Convert('" + System.DateTime.Now.AddSeconds(-interval/1000).ToString() + "','System.DateTime')";

DataTable userTable = (DataTable)Application["UserOnLine"];

DataRow[] lineOutUsers = userTable.Select(filter);

for(int i=0;i

{

DataRow curRow = lineOutUsers[i];

//保存到数据库

XsStudio.Database db = new XsStudio.Database();

curRow.Delete();

}

userTable.AcceptChanges();

Application.Lock();

Application["UserOnLine"] = userTable;

Application.UnLock();

}

}

}

责任编辑:admin
相关文章