ASP会员/角色提供者 - >如何举报当前登录的用户数?

时间:2012-01-26 05:27:48

标签: asp.net asp.net-membership

我正在使用ASP.NET成员资格和角色提供程序。我的问题是,是否有内置的方法来报告当前登录的用户数。问题不是获取有关登录用户的信息,而是从登录的每个人的高级视图获取。

我想创建一个用户管理信息中心,这个指标会很棒。同时显示当前登录用户的用户名也很有用。

感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:2)

是的,有内置方式,请参阅Membership.GetNumberOfUsersOnline()。您可以更改在线考虑的“窗口”,请参阅Membership.UserIsOnlineTimeWindow。 (您在web.config中设置阈值)

<强>更新

回应您关于获取在线用户名列表的评论......

会员资格API缺乏你想要的,所以你必须自己动手。您可以使用以下作为入门代码,它类似于我过去所做的:

public static List<string> GetUsersOnline() {
  List<string> l = new List<string>();
  string CS = WebConfigurationManager
    .ConnectionStrings[YOUR_WEB_CONFIG_KEY]
    .ConnectionString
  ;
  string sql = @"
SELECT UserName,LastActivityDate 
FROM aspnet_Users
WHERE LastActivityDate > @window 
ORDER BY LastActivityDate DESC"
  ;
  using (SqlConnection c = new SqlConnection(CS) ) {
    using (SqlCommand cmd = new SqlCommand(sql, c) ) {
      DateTime window = DateTime.UtcNow.AddMinutes(
        -Membership.UserIsOnlineTimeWindow
      );
      cmd.Parameters.AddWithValue("@window", window);
      c.Open();
      using (SqlDataReader r = cmd.ExecuteReader() ) {
        while ( r.Read() ) {
          l.Add(r.GetString(0));
        }
      }
    }
  }
  return l;
} 

几点说明:

  • 将上面的YOUR_WEB_CONFIG_KEY替换为您的web.config <connectionStrings>部分中的密钥。
  • LastActivityDate表(aspnet_Users数据库)中的aspnetdb字段存储为GMT / UTC Datetime值,这就是使用DateTime.UtcNow的原因计算窗口。
  • 不确定如何设置成员资格数据库权限,但可能需要更改权限,因为上面的代码直接查询数据库。