Как определить количество пользователей на сайте ASP.NET (IIS)? И их информация? - PullRequest
16 голосов
/ 01 октября 2008

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

Ответы [ 8 ]

17 голосов
/ 18 марта 2009

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

In 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 (ссылка больше не активна)

11 голосов
/ 01 октября 2008

Счетчики производительности ASP.NET , такие как State Server Sessions Active (количество активных пользовательских сессий) должны помочь вам. Тогда вы можете просто прочитать и отобразить счетчики производительности со страницы администратора.

4 голосов
/ 18 марта 2009

Если вы используете .net Членство, вы можете использовать

Membership.GetNumberOfUsersOnline()

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

2 голосов
/ 29 мая 2009

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

1 голос
/ 25 июня 2018

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

SELECT Count(*) As Onlines FROM ASPStateTempSessions WHERE Expires>getutcdate()
1 голос
/ 01 октября 2008

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

0 голосов
/ 08 мая 2017

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

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

0 голосов
/ 23 сентября 2013

Вы можете использовать PerformanceCounter для получения данных из пространства имен System.Diagnostics. Это позволяет вам получить "Sessions 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, которые можно отслеживать

...