我想在我的页面中显示登录用户数。我使用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();
}
实现这一目标的其他任何方式?
谢谢。!
答案 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);