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