ASP.NET获取登录用户的计数

时间:2014-01-10 07:25:27

标签: c# asp.net

我想在我的页面中显示登录用户数。我使用Application Variable实现了这个,但问题是当用户关闭浏览器时它没有减少计数。

首先,我使用IE打开Web应用程序,计数变为1,然后我使用firefox打开应用程序,计数变为2.当我关闭任何一个浏览器时,计数没有减少。

void Application_Start(object sender, EventArgs e)
{ 
      Application["UsersCount"] = 0;
}

void Application_End(object sender, EventArgs e)
{
}

void Session_Start(object sender, EventArgs e)
{
   if (Application["UsersCount"] != null)
   {
      Application.Lock();
      Application["UsersCount"] = ((int)Application["UsersCount"]) + 1;
      Application.UnLock();
   }
}
void Session_End(object sender, EventArgs e)
{
      Application.Lock();
      Application["UsersCount"] = ((int)Application["UsersCount"]) - 1;
      Application.UnLock();
}

实现这一目标的其他任何方式?

谢谢。!

1 个答案:

答案 0 :(得分:0)

实现起来并不是那么简单。 登录实际上并不意味着用户在做某事。您应该设置一些超时(可能与auth cookie生命周期相同)并检查每个用户的最后一个活动标记。特殊的DB表对此有好处,但是如果你想要快速而肮脏的解决方案:

您可以保留IDictionary<Guid, DateTime>每个请求都会更新的内容。 Guid用于最后一个活动的UserID,DateTime。在每个请求(可能在后面的MasterPage代码中的某个位置)上,使用当前DateTime更新此字典。然后,您可以使用DateTime小于超时来检查ID的计数。

IDictionary<Guid, DateTime> userActivityLog = Application["UserActivityLog"] as IDictionary<Guid, DateTime>;
DateTime timeout = DateTime.Now.AddHours(-1); // one hour timeout
int loggedCount = userActivityLog.Count(x => x.Value > timeout);