Членство в ASP / поставщик ролей -> как сообщить о количестве пользователей, вошедших в систему в данный момент? - PullRequest
0 голосов
/ 26 января 2012

Я пользуюсь провайдером членства и роли ASP.NET.У меня вопрос о том, есть ли встроенный способ сообщать о количестве пользователей, которые в данный момент вошли в систему. Вопрос не в том, чтобы получить информацию о пользователе, который вошел в систему, а из общего представления о всех вошедших в систему.

Я хотел бы создать панель управления пользователями, и этот показатель был бы великолепен.Также было бы полезно показать имена пользователей, которые в данный момент вошли в систему.

спасибо за любую помощь, которую вы можете предоставить.

1 Ответ

2 голосов
/ 26 января 2012

Да, есть встроенный способ, см. Membership.GetNumberOfUsersOnline () . Вы можете изменить «окно» для того, что считается онлайн, см. Membership.UserIsOnlineTimeWindow . (вы устанавливаете порог в web.config)

UPDATE

В ответ на ваш комментарий о получении списка имен пользователей в сети ...

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.
  • Не уверен, как настроены ваши разрешения для базы данных Членства, но вам может необходимо внести изменения в разрешения, поскольку приведенный выше код напрямую запрашивает базу данных.
...