ASP.NET實(shí)現(xiàn)用戶在線檢測(cè)的類(lèi)源碼

2010-08-28 10:50:18來(lái)源:西部e網(wǎng)作者:

//online.cs(用戶在線檢測(cè))
/*程序?qū)崿F(xiàn)思路:

該用戶有以下幾個(gè)屬性:
name:用戶名
sessionID:用戶ID,通過(guò)它唯一表示一個(gè)用戶
iswhere :附加信息,用戶當(dāng)前所在位置
lasttime:用戶登陸時(shí)間
curtime:本次刷新時(shí)間

在客戶端,使用一個(gè)IFRAME,裝載一個(gè)刷新頁(yè)面,每隔XX秒更新一下他的名字對(duì)應(yīng)的curtime,就表示他仍然在

在服務(wù)器端,建立一個(gè)守護(hù)線程,每隔固定時(shí)間就運(yùn)行一遍,然后判斷當(dāng)前所有用戶列表中的時(shí)間間隔是否超出了規(guī)定的時(shí)間,如果超出,則將該用戶從在線列表中刪除,這樣就可以做到檢測(cè)用戶是否在線了,而如果再單獨(dú)
寫(xiě)個(gè)用戶離線后的處理,就可以解決好多人問(wèn)到的:用戶意外吊線后的處理。
*/

#define DEBUG

using System;
using System.Data;
using System.Data.SqlClient;
using System.Collections ;
using System.Threading ;
using System.Web;
using System.Diagnostics;

namespace SohoProject
{
    //定義了一個(gè)結(jié)構(gòu)
    public struct User
    {
     public string name;
     public DateTime lasttime; 
     public DateTime curtime;
     public string sessionid;
  public string ip;
     public string iswhere;
    }

 public class OnLineUser
 {
  private static DataTable _alluser;
 
  //只讀屬性
  public DataTable alluser{
   get{return _alluser;}
  }

  public OnLineUser()
  {
   if(_alluser==null)
   {
    //define user list
    // Declare variables for DataColumn and DataRow objects.
    _alluser = new DataTable("onlineuser");

    DataColumn myDataColumn;
 
    // Create new DataColumn, set DataType, ColumnName and add to DataTable.   
    myDataColumn = new DataColumn();
    myDataColumn.DataType = System.Type.GetType("System.String");
    myDataColumn.ColumnName = "name";
    myDataColumn.AutoIncrement = false;
    myDataColumn.Caption = "name";
    myDataColumn.ReadOnly = false;
    myDataColumn.Unique = false;
    _alluser.Columns.Add(myDataColumn);
 
 
    // Create sessionid column.
    myDataColumn = new DataColumn();
    myDataColumn.DataType = System.Type.GetType("System.String");
    myDataColumn.ColumnName = "sessionid";
    myDataColumn.AutoIncrement = false;
    myDataColumn.Caption = "sessionid";
    myDataColumn.ReadOnly = false;
    myDataColumn.Unique = true;
    _alluser.Columns.Add(myDataColumn);

    // Create ip column.
    myDataColumn = new DataColumn();
    myDataColumn.DataType = System.Type.GetType("System.String");
    myDataColumn.ColumnName = "ip";
    myDataColumn.AutoIncrement = false;
    myDataColumn.Caption = "ip";
    myDataColumn.ReadOnly = false;
    myDataColumn.Unique = false;
    _alluser.Columns.Add(myDataColumn);

    // Create iswhere column.
    myDataColumn = new DataColumn();
    myDataColumn.DataType = System.Type.GetType("System.String");
    myDataColumn.ColumnName = "iswhere";
    myDataColumn.AutoIncrement = false;
    myDataColumn.Caption = "iswhere";
    myDataColumn.ReadOnly = false;
    myDataColumn.Unique = false;
    _alluser.Columns.Add(myDataColumn);

    // Create iswhere column.
    myDataColumn = new DataColumn();
    myDataColumn.DataType = System.Type.GetType("System.DateTime");
    myDataColumn.ColumnName = "lasttime";
    myDataColumn.AutoIncrement = false;
    myDataColumn.Caption = "lasttime";
    myDataColumn.ReadOnly = false;
    myDataColumn.Unique = false;
    _alluser.Columns.Add(myDataColumn);

    // Create iswhere column.
    myDataColumn = new DataColumn();
    myDataColumn.DataType = System.Type.GetType("System.DateTime");
    myDataColumn.ColumnName = "curtime";
    myDataColumn.AutoIncrement = false;
    myDataColumn.Caption = "curtime";
    myDataColumn.ReadOnly = false;
    myDataColumn.Unique = false;
    _alluser.Columns.Add(myDataColumn);
   }
  }


  //功能說(shuō)明:將當(dāng)前用戶加入在線列表
  //如果該用戶的數(shù)據(jù)當(dāng)前仍然在在線列表中,則暫時(shí)先不讓該用戶登陸,提示用戶存在
  public bool  AddUserToOnLine(User user)
  {
#if DEBUG
   (new SohoProject.SohoDebug()).WriteToDoc("開(kāi)始進(jìn)入<將當(dāng)前用戶加入在線列表>....");
   (new SohoProject.SohoDebug()).WriteToDoc("\r\n");
#endif

關(guān)鍵詞:ASP.NET