【问题标题】:Online Users on ASP.NET ApplicationASP.NET 应用程序上的在线用户
【发布时间】:2015-10-21 18:22:07
【问题描述】:

看到很多与同一概念相关的文章和链接。

Counting online users using asp.net

Is there any ASP.NET application to monitor online user and page view log report?

我的有点不同。我的应用程序是 MVC4 并使用 SimpleMembershipProvider。我不确定为什么 GetNumberOfUsersOnline 不起作用。

https://msdn.microsoft.com/en-us/library/system.web.security.membership.getnumberofusersonline(v=vs.110).aspx

有什么想法吗?如何以简单有效的方式做到这一点。我只是在我网站的一个地方使用它。

【问题讨论】:

  • This 建议 SimpleMembership 没有实现该功能。
  • 您想知道登录的用户数吗?还是在线用户总数?
  • @SimchaKhabinsky 在线用户总数

标签: asp.net asp.net-mvc-4 simplemembership


【解决方案1】:

我在网上找到了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"];

【讨论】:

【解决方案2】:

您可以使用 signalR 来跟踪连接的用户。使用它,您可以有效地实时在线计数,还可以跟踪连接的用户信息。您也可以设置条件来跟踪登录用户。因此,使用最新技术。您可以使用现有的 MVC 应用程序来实现。

你也可以参考这个官方教程。

http://www.asp.net/signalr

【讨论】:

    【解决方案3】:

    另一个与您的代码完全正交的好解决方案是 Google Analytics。 http://www.google.com/analytics/ 使用GA,您可以在您的网站上看到活跃用户的实时显示。它还有助于您了解一段时间内的历史记录并查看用户活动的高峰和低谷。

    【讨论】:

      【解决方案4】:

      来自微软文档:

      GetNumberOfUsersOnline 返回上次活动日期大于当前时间减去 UserIsOnlineTimeWindow 的当前 ApplicationName 的用户数。当通过 ValidateUserUpdateUser 方法验证用户凭据或调用 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.
       }
      }
      

      只需在用户注销时减少在线用户计数逻辑

      如果你想跟踪访问者和访问的页面,这里有一些想法:

      【讨论】:

      • 很遗憾,这在较新的 ASP.Net Identity 模型中不可用。 :(
      【解决方案5】:

      您可以尝试阅读here 列出的性能计数器:

      Current Anonymous Users 是匿名 IIS 用户的数量

      Current Non-Anonymous Users是授权 IIS 用户的数量

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-03-01
        • 1970-01-01
        • 2010-12-21
        • 2012-07-07
        • 1970-01-01
        • 2012-05-30
        • 2011-05-05
        相关资源
        最近更新 更多