Как я могу определить количество пользователей на ASP.NET сайте (IIS)?А их информация?

StackOverflow https://stackoverflow.com/questions/155593

Вопрос

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

Это было полезно?

Решение

ASP.NET Счетчики производительности как и состояние активных сеансов сервера (количество активных пользовательских сеансов), это должно вам помочь.Тогда вы можете просто считывание и отображение счетчиков производительности со страницы вашего администратора..

Другие советы

В global.aspx

void Application_Start(object sender, EventArgs e)
{
    // Code that runs on application startup
    Application["OnlineUsers"] = 0;
}

void Session_Start(object sender, EventArgs e)
{
    // Code that runs when a new session is started
    Application.Lock();
    Application["OnlineUsers"] = (int)Application["OnlineUsers"] + 1;
    Application.UnLock();
}

void Session_End(object sender, EventArgs e)
{
    // Code that runs when a session ends. 
    // Note: The Session_End event is raised only when the sessionstate 
    // mode is set to InProc in the Web.config file. 
    // If session mode is set to StateServer or SQLServer, 
    // the event is not raised.
    Application.Lock();
    Application["OnlineUsers"] = (int)Application["OnlineUsers"] - 1;
    Application.UnLock();
}

Примечание: Приложение.Методы блокировки и Application.Unlock используются для предотвращения одновременного изменения этой переменной несколькими потоками.

В Web.config

Убедитесь, что состояние сеанса равно "InProc", чтобы это сработало

    <system.web>
        <sessionState mode="InProc" cookieless="false" timeout="20" />
    </system.web>

В вашем файле .aspx

Visitors online: <%= Application["OnlineUsers"].ToString() %>

Примечание: Код был первоначально скопирован с http://www.aspdotnetfaq.com/Faq/How-to-show-number-of-online-users-visitors-for-ASP-NET-website.aspx (ссылка больше не активна)

Если вы используете членство в .net, вы могли бы использовать

Membership.GetNumberOfUsersOnline()

Подробнее об этом: http://msdn.microsoft.com/en-us/library/system.web.security.membership.getnumberofusersonline.aspx

Если вы хотите реализовать тот же механизм самостоятельно, вы можете определить класс CurrentUserManager и реализовать шаблон singleton здесь.Этот одноэлементный объект класса CurrentUserManager был бы уникальным в AppDomain.В этом классе вы создадите его собственный экземпляр один раз, и вы запретите другим создавать новые экземпляры этого класса, скрыв его конструктор.Всякий раз, когда запрос поступает к этому объекту, этот единственный экземпляр выдает ответ.Итак, если вы реализуете список, в котором хранятся записи каждого пользователя (когда пользователь входит, вы добавляете его в список;когда он выйдет, вы вычеркнете его из списка).И, наконец, если вам нужно текущее количество пользователей, вы могли бы просто задать количество списков этому одноэлементному объекту.

Способ, которым я видел, как это делалось в прошлом, - добавление дополнительного кода к событию Session_OnStart в файл Global.asax для хранения информации независимо от сеанса, напримербаза данных или объект HttpApplicationState.В зависимости от ваших потребностей вы также можете использовать Session_OnEnd для удаления этой информации.

Возможно, вы захотите инициализировать и очистить часть этой информации, используя события Application_Start и Application_End.

Затем страница администрирования может прочитать эту информацию, отобразить статистику и т.д.

Более подробно это объясняется в http://msdn.microsoft.com/en-us/library/ms178594.aspx и http://msdn.microsoft.com/en-us/library/ms178581.aspx.

если вы используете sql server в качестве поставщика состояния сеанса, вы можете использовать этот код для подсчета количества пользователей в Сети:

SELECT Count(*) As Onlines FROM ASPStateTempSessions WHERE Expires>getutcdate()

Вы можете использовать PerformanceCounter для получения данных из System.Пространство имен Diagnostics.Это позволяет вам активировать "Сеансы" и многое другое.Это позволяет вам получать доступ как с локального сервера, так и с удаленного.

Вот пример того, как это сделать на локальном компьютере

void Main()
{
    var pc = new PerformanceCounter("ASP.NET Applications", "Sessions Active", "__Total__");

    Console.WriteLine(pc.NextValue());
}

или для удаленного сервера вы бы сделали:

void Main()
{
    var pc = new PerformanceCounter("ASP.NET Applications", "Sessions Active", "__Total__", "ServerHostName.domain");

    Console.WriteLine(pc.NextValue());
}

Счетчики производительности для ASP.NET предоставляет полный список ASP.NET счетчиков, которые вы можете отслеживать

В Google Analytics есть API, который может быть реализован на вашей заявки ASP.NET в MVC.Он работает в режиме реального времени, поэтому текущее количество пользователей на вашем веб-сайте можно отслеживать и возвращать в ваше приложение.

Вот некоторая информация

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top