Come posso determinare il numero di utenti su un sito ASP.NET (IIS)? E le loro informazioni?

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

Domanda

Esiste un modo per determinare il numero di utenti che hanno sessioni attive in un'applicazione ASP.NET? Ho una pagina di amministrazione / strumenti in una particolare applicazione e vorrei visualizzare informazioni relative a tutte le sessioni aperte, come il numero di sessioni e forse gli indirizzi delle macchine richiedenti o altre informazioni sulle credenziali per ciascun utente.

È stato utile?

Soluzione

Contatori delle prestazioni ASP.NET come State Server Sessions Active (Il numero di sessioni utente attive) dovrebbe aiutarti. Quindi è possibile leggere e visualizzare i contatori delle prestazioni dalla pagina di amministrazione. .

Altri suggerimenti

In 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();
}

Nota: i metodi Application.Lock e Application.Unlock vengono utilizzati per impedire a più thread di modificare questa variabile contemporaneamente.

In Web.config

Verifica che SessionState sia " InProc " affinché funzioni

    <system.web>
        <sessionState mode="InProc" cookieless="false" timeout="20" />
    </system.web>

Nel tuo file .aspx

Visitors online: <%= Application["OnlineUsers"].ToString() %>

Nota: il codice è stato originariamente copiato da http://www.aspdotnetfaq.com/Faq/How-to-show-number-of-online-users-visitors-for- ASP-NET-website.aspx (collegamento non più attivo)

Se si utilizza l'abbonamento .net è possibile utilizzare

Membership.GetNumberOfUsersOnline()

Ulteriori informazioni: http: / /msdn.microsoft.com/en-us/library/system.web.security.membership.getnumberofusersonline.aspx

Se desideri implementare lo stesso meccanismo da solo, puoi definire come una classe CurrentUserManager e implementare qui il modello singleton. Questo oggetto singleton della classe CurrentUserManager sarebbe univoco in AppDomain. In questa classe creerai una sua istanza personale una volta e proibirai agli altri di creare nuove istanze di questa classe nascondendo il suo costruttore. Ogni volta che una richiesta arriva a questo oggetto, quella singola istanza darà la risposta. Quindi, se si implementa un elenco che conserva i record di ogni utente (quando un utente entra, lo si aggiunge all'elenco; quando esce, lo si rimuove dall'elenco). Infine, se si desidera il conteggio degli utenti correnti, è possibile semplicemente richiedere il conteggio degli elenchi a questo oggetto singleton.

Il modo in cui l'ho visto fare in passato è l'aggiunta di codice aggiuntivo all'evento Session_OnStart nel file Global.asax per memorizzare le informazioni in modo agnostico di sessione, ad es. un database o l'oggetto HttpApplicationState. A seconda delle tue esigenze puoi anche utilizzare Session_OnEnd per rimuovere queste informazioni.

Potresti voler inizializzare e ripulire alcune di queste informazioni usando gli eventi Application_Start e Application_End.

La pagina di amministrazione può quindi leggere queste informazioni e visualizzare statistiche ecc.

Questo è spiegato più in dettaglio in http://msdn.microsoft. com / en-us / library / ms178594.aspx e http: //msdn.microsoft.com/en-us/library/ms178581.aspx .

se si utilizza il server sql come provider dello stato della sessione, è possibile utilizzare questo codice per contare il numero di utenti online:

SELECT Count(*) As Onlines FROM ASPStateTempSessions WHERE Expires>getutcdate()

È possibile utilizzare PerformanceCounter per ottenere dati dallo spazio dei nomi System.Diagnostics. Ti consente di ottenere " Sessioni attive " e altro ancora. Ti permette di ottenere sia dal server locale che dal remoto.

Ecco un esempio di come farlo sul computer locale

void Main()
{
    var pc = new PerformanceCounter("ASP.NET Applications", "Sessions Active", "__Total__");

    Console.WriteLine(pc.NextValue());
}

o per il server remoto dovresti fare:

void Main()
{
    var pc = new PerformanceCounter("ASP.NET Applications", "Sessions Active", "__Total__", "ServerHostName.domain");

    Console.WriteLine(pc.NextValue());
}

Contatori delle prestazioni per ASP.NET fornisce un elenco completo di ASP. Contatori NET che puoi monitorare

Google Analytics viene fornito con un'API che può essere implementata nell'applicazione ASP.NET MVC. Ha la funzionalità RealTime in modo che la quantità corrente di utenti sul tuo sito Web possa essere tracciata e restituita alla tua applicazione.

Ecco alcune informazioni

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top