ASP.NET实现用户在线检测的类源码

2008-02-22 09:27:10来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

//online.cs(用户在线检测)
/*程序实现思路:

该用户有以下几个属性:
name:用户名
sessionID:用户ID,通过它唯一表示一个用户
iswhere :附加信息,用户当前所在位置
lasttime:用户登陆时间
curtime:本次刷新时间

在客户端,使用一个IFRAME,装载一个刷新页面,每隔XX秒更新一下他的名字对应的curtime,就表示他仍然在

在服务器端,建立一个守护线程,每隔固定时间就运行一遍,然后判断当前所有用户列表中的时间间隔是否超出了规定的时间,如果超出,则将该用户从在线列表中删除,这样就可以做到检测用户是否在线了,而如果再单独
写个用户离线后的处理,就可以解决好多人问到的:用户意外吊线后的处理。
*/

#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
{
//定义了一个结构
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);
}
}


//功能说明:将当前用户加入在线列表
//如果该用户的数据当前仍然在在线列表中,则暂时先不让该用户登陆,提示用户存在
public bool AddUserToOnLine(User user)
{
#if DEBUG
(new SohoProject.SohoDebug()).WriteToDoc("开始进入<将当前用户加入在线列表>....");
(new SohoProject.SohoDebug()).WriteToDoc("\r\n");
#endif


//开始搜索是否已经存在该用户,如果存在则是改变数据,否则添加新的用户
string strExpr;
strExpr = "sessionid='" user.sessionid "'";
DataRow[] curUser;
// Use the Select method to find all rows matching the filter.
#if DEBUG
(new SohoProject.SohoDebug()).WriteToDoc("搜索字符串:" strExpr);
(new SohoProject.SohoDebug()).WriteToDoc("\r\n");
#endif


curUser = _alluser.Select(strExpr);

#if DEBUG
(new SohoProject.SohoDebug()).WriteToDoc(strExpr);
(new SohoProject.SohoDebug()).WriteToDoc(curUser.Length.ToString());
#endif


if (curUser.Length >0 )
{
for(int i = 0; i < curUser.Length; i )
{
curUser[i]["curtime"]=DateTime.Now;
curUser[i]["iswhere"]=user.iswhere;

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:DotNet Form间数据传递

下一篇:asp.net上传图片并同时生成缩略图