ASP.NET 사이트 (IIS)의 사용자 수를 어떻게 결정할 수 있습니까? 그리고 그들의 정보?
문제
ASP.NET 응용 프로그램에서 활성 세션이있는 사용자 수를 결정하는 방법이 있습니까? 특정 응용 프로그램에 관리자/도구 페이지가 있으며 세션 수, 요청 기계 주소 또는 각 사용자에 대한 기타 자격 증명 정보와 같은 모든 열린 세션에 관한 정보를 표시하고 싶습니다.
해결책
ASP.NET 성능 카운터 State Server Sessions Active (활성 사용자 세션 수)가 도움이됩니다. 그럼 당신은 그냥 할 수 있습니다 성능 카운터를 읽고 표시하십시오 관리자 페이지에서 ..
다른 팁
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--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 클래스처럼 정의하고 여기에서 싱글 톤 패턴을 구현할 수 있습니다. Class CurrentUserManager 의이 싱글 톤 객체는 AppDomain에서 독특합니다. 이 클래스에서는 자체 인스턴스를 한 번 만들고 다른 사람들이 생성자를 숨겨서이 클래스의 새로운 인스턴스를 만드는 것을 금지합니다. 요청 이이 개체에 올 때마다 해당 단일 인스턴스가 응답을 제공합니다. 따라서 모든 사용자의 레코드를 유지하는 목록을 구현하면 (사용자가 들어 오면 목록에 그를 추가하십시오. 그가 외출 할 때 목록에서 그를 제거합니다). 마지막으로, 현재 사용자 수를 원한다면이 싱글 톤 객체에 목록 수를 요청할 수 있습니다.
내가 과거에 수행 한 방식은 Global.asax 파일의 Session_OnStart 이벤트에 추가 코드를 추가하여 정보를 세션 비전적 방식 (예 : 데이터베이스 또는 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.
SQL Server를 세션 상태 제공 업체로 사용하는 경우이 코드를 사용하여 온라인 사용자 수를 계산할 수 있습니다.
SELECT Count(*) As Onlines FROM ASPStateTempSessions WHERE Expires>getutcdate()
Performancecounter를 사용하여 System.Diagnostics 네임 스페이스에서 데이터를 가져올 수 있습니다. "세션을 활성화"할 수 있습니다. 로컬 서버와 리모컨에서 얻을 수 있습니다.
다음은 로컬 머신에서 수행하는 방법의 예입니다.
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에는 ASP.NET MVC 응용 프로그램에서 구현할 수있는 API가 제공됩니다. 실시간 기능이 있으므로 웹 사이트의 현재 사용자를 추적하여 응용 프로그램으로 반환 할 수 있습니다.