看到很多与同一概念相关的文章和链接。
Counting online users using asp.net
Is there any ASP.NET application to monitor online user and page view log report?
我的情况略有不同。我的应用程序是MVC4并使用SimpleMembershipProvider。我不确定为什么GetNumberOfUsersOnline无效。
任何想法?如何以简单有效的方式做到这一点。我只是在我网站的一个地方使用它。
答案 0 :(得分:4)
我在网上找到this它看起来好像适合你。只需将此代码添加到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"];
答案 1 :(得分:2)
来自Microsoft文档:
GetNumberOfUsersOnline 返回当前ApplicationName的用户数,其中最后活动日期大于当前时间减去 UserIsOnlineTimeWindow 。通过 ValidateUser 或 UpdateUser 方法验证用户凭据时,或者当调用<时,上次活动日期/时间戳会更新为当前日期和时间strong> GetUser 不带参数的重载或使用userIsOnline参数的重载指定应更新日期/时间戳。
您可以看到GetNumberOfUsersOnline依赖于多个参数而且没有效果。 作为一种解决方法,我建议您可以使用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.
}
}
在用户注销中减少在线用户计数逻辑
如果您想要跟踪访问者和访问过的网页,请注意以下几点:
答案 2 :(得分:2)
您可以尝试阅读列出的效果计数器here:
当前匿名用户是匿名IIS用户的数量
当前非匿名用户是授权IIS用户的数量
答案 3 :(得分:2)
与您的代码愉快正交的另一个不错的解决方案是Google Analytics。 http://www.google.com/analytics/使用GA,您可以在网站上看到活跃用户的实时显示。随着时间的推移,您还可以看到用户活动的高峰和低谷。
答案 4 :(得分:2)
您可以使用signalR跟踪已连接的用户。使用此功能,您可以高效地在线计算。实时并跟踪连接的用户信息。您也可以将条件设置为跟踪登录用户。所以,采用最新技术。您可以使用现有的MVC应用程序实现。
您可以参考此官方教程。