关于用户在线

// 需求如题(估计平均在线人数几百,最大在线人数3000),
// 初步想法如下,欢迎提提意见:
public   class  UserOnLine
{
        
public static void pageLoad(System.Web.UI.Page page)
        
{
            
int minutes = 5;//定义5分钟页面不回传用户下线

            DataTable dt 
= null;
            
if(page.Application["UserOnLine"!= null)
            
{
                dt 
= (DataTable)page.Application["UserOnLine"];
            }

            
else
            
{
                dt 
= new DataTable();
                dt.Columns.Add(
"UserName");
                dt.Columns.Add(
"FirstLoadTime");
                dt.Columns.Add(
"LastLoadTime");
            }


            
//将当前用户添加到在线用户列表
            string userName = page.Session["username"].ToString();
            DataRow[] rows 
= dt.Select("UserName='" + userName + "'");
            
if(rows.Length>0)
                rows[
0][2= System.DateTime.Now.ToString();
            
else
                dt.Rows.Add(
new object[]{userName,System.DateTime.Now.ToString(),System.DateTime.Now.ToString()});

            dt.AcceptChanges();

            
//筛选长时间没有PostBack的用户,认为已经下线
            DataRow[] downRows = dt.Select("Convert(LastLoadTime,'System.DateTime')<Convert('"+System.DateTime.Now.AddMinutes(-minutes).ToString()+"','System.DateTime')");

            
for(int i=0;i<downRows.Length;i++)
            
{
                
//将downRows[i]的记录保存到数据库
                
                downRows[i].Delete();
            }


            dt.AcceptChanges();
            page.Application[
"UserOnLine"= dt;
        }

    }

// 在每个页面的Page_Load的时候调用此方法;
// 由于我的项目所有的页面都是继承子一个basePage类,该类继承System.Web.UI.Page,所以实际上并不需要改动任何一个页面,而只需要改一下basePage类就可以了。

你可能感兴趣的:(用户)