[英]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.