繁体   English   中英

ASP.NET获取已登录用户的数量

[英]ASP.NET get count of logged-In User

我想在页面上显示已登录用户数。 我使用“应用程序变量”实现了此功能,但问题是它在用户关闭浏览器时并未减少计数。

首先,我使用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();
}

还有其他方法可以做到这一点吗?

谢谢。!

这不是那么容易实现。 登录实际上并不一定意味着用户正在做某事。 您应该设置一些超时时间(可能与auth cookie的生存时间相同),并检查每个用户的最后一个活动标记。 特殊的数据库表对此很有用,但是如果您需要快速而肮脏的解决方案:

您可以保留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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM