Question

Existe-t-il un moyen de déterminer le nombre d'utilisateurs ayant des sessions actives dans une application ASP.NET? J'ai une page admin / tools dans une application particulière et j'aimerais afficher des informations sur toutes les sessions ouvertes, telles que le nombre de sessions et peut-être les adresses des ordinateurs demandeurs, ou d'autres informations d'identification pour chaque utilisateur.

Était-ce utile?

La solution

Compteurs de performance ASP.NET comme les sessions de serveur d'état actives nombre de sessions d’utilisateur actif) devrait vous aider. Ensuite, vous pouvez simplement lire et afficher les compteurs de performance à partir de votre page d'administrateur. .

Autres conseils

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

Remarque: Les méthodes Application.Lock et Application.Unlock permettent d'empêcher plusieurs threads de modifier cette variable en même temps.

Dans Web.config

Vérifiez que le SessionState est " InProc " pour que cela fonctionne

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

Dans votre fichier .aspx

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

Remarque: le code a été copié à partir de http://www.aspdotnetfaq.com/Faq/How-to-show-number-of-on-line-users-visitors-for- ASP-NET-website.aspx (le lien n'est plus actif)

Si vous utilisez un abonnement .net, vous pouvez utiliser

Membership.GetNumberOfUsersOnline()

Pour en savoir plus: http: / /msdn.microsoft.com/en-us/library/system.web.security.membership.getnumberofusersonline.aspx

Si vous souhaitez implémenter vous-même le même mécanisme, vous pouvez le définir comme une classe CurrentUserManager et implémenter ici le modèle singleton. Cet objet singleton de la classe CurrentUserManager serait unique dans AppDomain. Dans cette classe, vous créerez son propre instance une fois et vous interdirez aux autres de créer de nouvelles instances de cette classe en masquant son constructeur. Chaque fois qu'une demande arrive à cet objet, cette instance unique donnera la réponse. Donc, si vous implémentez une liste qui conserve les enregistrements de chaque utilisateur (lorsqu'un utilisateur arrive, vous l'ajoutez à la liste; lorsqu'il sort, vous le supprimez). Et enfin, si vous voulez le nombre d'utilisateurs actuel, vous pouvez simplement demander le nombre de listes à cet objet singleton.

Comme je l’ai déjà fait par le passé, du code supplémentaire a été ajouté à l’événement Session_OnStart dans le fichier Global.asax pour stocker les informations de manière indépendante de la session, par exemple. une base de données ou l'objet HttpApplicationState. En fonction de vos besoins, vous pouvez également utiliser Session_OnEnd pour supprimer ces informations.

Vous voudrez peut-être initialiser et nettoyer certaines de ces informations à l'aide des événements Application_Start et Application_End.

La page d'administration peut alors lire ces informations et afficher des statistiques, etc.

Ceci est expliqué plus en détail à l'adresse http://msdn.microsoft. com / fr-fr / library / ms178594.aspx et http: //msdn.microsoft.com/en-us/library/ms178581.aspx .

si vous utilisez SQL Server en tant que fournisseur d'état de session, vous pouvez utiliser ce code pour compter le nombre d'utilisateurs en ligne:

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

Vous pouvez utiliser PerformanceCounter pour obtenir des données de l'espace de noms System.Diagnostics. Il vous permet d’obtenir "Sessions actives". et beaucoup plus. Il vous permet d’obtenir à partir d’un serveur local ou distant.

Voici un exemple de procédure à suivre sur une machine locale

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

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

ou pour un serveur distant, vous feriez:

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

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

Compteurs de performance pour ASP.NET fournit la liste complète des ASP. Compteurs NET que vous pouvez surveiller

Google Analytics est fourni avec une API pouvant être implémentée sur votre application ASP.NET MVC. Il dispose de la fonctionnalité RealTime permettant de suivre le nombre d'utilisateurs actuels sur votre site Web et de le renvoyer à votre application.

Voici quelques informations

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top