设为首页
加入收藏
站内地图
旧版入口
当前位置:首页 > 站长学院 > 网络编程 > ASP.NET

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

作者:佚名 出处:网络转载 时间:05-27 点击:

内容载入中...
华腾联合陪你一路学习 rosibo 总的来说,要做个在线人数统计简单,但是要做在线名单并且保存用户的访问日志,就需要耗费比较多的系统资源,是否划算就难说了(我只看需求文档,其他不管...);  
   
  前面用过的IHttpModule方法也不错  
  using   System;  
  using   System.ComponentModel;  
  using   System.Web;  
  using   System.Web.SessionState;  
  using   System.Data;  
  using   System.Data.OleDb;  
   
  namespace   XsExam  
  {  
  ///   <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)  
                          {  
                                  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<lineOutUsers.Length;i++)  
                          {  
                                  DataRow   curRow   =   lineOutUsers[i];  
                                   
                                  //保存到数据库  
                                  XsStudio.Database   db   =   new   XsStudio.Database();  
                curRow.Delete();  
                                   
                          }  
                          userTable.AcceptChanges();  
   
                          Application.Lock();  
                          Application["UserOnLine"]   =   userTable;  
                          Application.UnLock();  
                  }  
   
                 
  }  
  }  
收藏本文:
】【打印页面】【推荐给朋友】【关闭窗口

站长学院

推荐信息