ASP.NET 사이트 (IIS)의 사용자 수를 어떻게 결정할 수 있습니까? 그리고 그들의 정보?

StackOverflow https://stackoverflow.com/questions/155593

문제

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가 제공됩니다. 실시간 기능이 있으므로 웹 사이트의 현재 사용자를 추적하여 응용 프로그램으로 반환 할 수 있습니다.

다음은 몇 가지 정보입니다

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top