Есть ли способ определить количество пользователей, имеющих активные сеансы в приложении ASP.NET? У меня есть страница admin/tools в определенном приложении, и я хотел бы отображать информацию обо всех открытых сеансах, таких как количество сеансов и, возможно, адреса запрашивающих машин или другая учетная информация для каждого пользователя.
Как определить количество пользователей на сайте ASP.NET(IIS)? И их информация?
Ответ 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, поэтому текущее количество пользователей на вашем веб-сайте можно отслеживать и возвращать в ваше приложение.