Как определить количество пользователей на сайте ASP.NET(IIS)? И их информация?
Есть ли способ определить количество пользователей, имеющих активные сеансы в приложении ASP.NET? У меня есть страница admin/tools в определенном приложении, и я хотел бы отображать информацию обо всех открытых сеансах, таких как количество сеансов и, возможно, адреса запрашивающих машин или другая учетная информация для каждого пользователя.
Ответы
Ответ 1
Счетчики производительности ASP.NET, такие как сеансы сервера состояния Active (количество активных сеансов пользователя), должны помочь вам. Затем вы можете просто читать и отображать счетчики производительности со своей страницы администратора.
Ответ 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
Ответ 3
Если вы используете членство .net, вы можете использовать
Membership.GetNumberOfUsersOnline()
Подробнее об этом: http://msdn.microsoft.com/en-us/library/system.web.security.membership.getnumberofusersonline.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, поэтому текущее количество пользователей на вашем веб-сайте можно отслеживать и возвращать в ваше приложение.
Здесь некоторая информация