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

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

Ответы

Ответ 2

В 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.Lock и Application.Unlock используются для предотвращения одновременного изменения нескольких потоков.

В Web.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

Ответ 4

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

Ответ 5

То, как я это делал в прошлом, добавляет дополнительный код к событию 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.

Ответ 6

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

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

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, которые вы можете отслеживать

Ответ 7

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

Здесь некоторая информация