//需求如题(估计平均在线人数几百,最大在线人数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类就可以了。
//初步想法如下,欢迎提提意见:
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类就可以了。