[英]Online Users on ASP.NET Application
看到很多与同一概念相关的文章和链接。
是否有任何ASP.NET应用程序来监控在线用户和页面查看日志报告?
我的情况略有不同。 我的应用程序是MVC4并使用SimpleMembershipProvider。 我不确定为什么GetNumberOfUsersOnline不起作用。
有任何想法吗 ? 如何以简单有效的方式做到这一点。 我只是在我网站的一个地方使用它。
我发现这个网上它看起来它会为你工作。 只需将此代码添加到Global.asax.cs文件中:
protected void Application_Start(Object sender, EventArgs e)
{
Application.Lock();
Application["UserCount"] = 0;
}
protected void Session_Start(Object sender, EventArgs e)
{
Application.Lock();
Application["UserCount"] = (int)Application["UserCount"] + 1;
Application.UnLock();
}
protected void Session_End(Object sender, EventArgs e)
{
Application.Lock();
Application["UserCount"] = (int)Application["UserCount"] - 1;
Application.UnLock();
}
然后,当您需要访问用户计数时,您可以使用:
var count = (int)Application["UserCount"];
来自Microsoft文档:
GetNumberOfUsersOnline返回当前ApplicationName的用户数,其中最后活动日期大于当前时间减去UserIsOnlineTimeWindow 。 通过ValidateUser或UpdateUser方法验证用户凭据时,或者当调用不带参数的GetUser重载或使用userIsOnline参数指定的用户凭据时,最后活动日期/时间戳更新为当前日期和时间应该更新日期/时间戳。
您可以看到GetNumberOfUsersOnline依赖于多个参数而且没有效果。 作为一种解决方法,我建议你可以nherits SqlMembershipProvider并覆盖GetNumberOfUsersOnline(),这样你就可以在这里实现你的逻辑。
public class MyMembershipProvider : SqlMembershipProvider
{
public override bool ValidateUser(string username, string password)
{
if (base.ValidateUser(username, password))
{
// successfully logged in. add logic to increment online user count.
return true;
}
return false;
}
public override int GetNumberOfUsersOnline()
{
// add logic to get online user count and return it.
}
}
只需减少用户注销中的在线用户计数逻辑
如果您想要访问跟踪访问者和访问过的页面,请在此处提
您可以尝试阅读此处列出的性能计数器:
当前匿名用户是匿名IIS用户的数量
当前的非匿名用户是授权的IIS用户数
另一个与您的代码正常结合的好方案是Google Analytics。 http://www.google.com/analytics/使用GA,您可以在网站上看到活跃用户的实时显示。 随着时间的推移,您还可以看到历史记录,并且可以看到用户活动的高峰和低谷。
您可以使用signalR跟踪已连接的用户。 使用此功能,您可以有效地在线计算和实时计算,并跟踪连接的用户信息。 您也可以将条件设置为跟踪登录用户。 所以,采用最新技术。 您可以使用现有的MVC应用程序实现。
你可以参考这个官方教程。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.