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

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

8 ответов


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


в глобальном.аспн

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();
}

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

В Интернете.config

убедитесь, что SessionState является "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 в глобальном.файл asax для хранения информации агностическим способом сеанса, например, база данных или объект HttpApplicationState. В зависимости от ваших потребностей вы также можете использовать Session_OnEnd для удаления этой информации.

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

страница администрирования может после этого прочитайте эту информацию и покажите статистику etc.

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


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

вот пример как это сделать на локальной машине

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. Он имеет функциональность в реальном времени, поэтому текущее количество пользователей на вашем сайте можно отслеживать и возвращать в приложение.

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


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

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