Question

Dans ASP.NET, je cherche un moyen d’auditer un utilisateur qui quitte mon application. Pour être plus précis, j'aimerais insérer un enregistrement de "déconnexion" dans une table d'audit dans SQL Server lorsque la session de l'utilisateur est abandonnée / détruite pour une raison quelconque (pas nécessairement à cause d'un appel à session.abandon)

J'ai une classe 'SessionHelper' qui gère les paramètres de session / getters.

J'ai déjà essayé de publier dans Session_End dans Global.asax, mais cet événement n'a jamais été déclenché, même après l'expiration du délai.

J'ai essayé de surcharger "finalize" dans la classe SessionHelper et de le faire là-bas lorsque la classe est détruite, mais l'événement n'a pas non plus été déclenché.

J'essaierais d'implémenter IDisposable dans le SessionHelper, mais je ne sais pas où l'appeler pour qu'il soit toujours appelé.

Quel est le bon moyen d'auditer un utilisateur quittant votre application ASP.NET?

Merci!

Était-ce utile?

La solution

L'événement Session_End n'est déclenché que si vous avez des sessions InProc. La gestion des sessions SQL ou du serveur d'état ne déclenchera pas cet événement. Si vous le pouvez, revenez aux sessions InProc et utilisez cet événement.

En dehors de cela, vous n’obtiendrez pas de très bonnes solutions. ASP.NET n'offre pas un moyen de consulter la liste actuelle des sessions sur le serveur (du moins, aucun moyen que les utilisateurs de StackOverflow connaissent, car j'ai déjà posé la question), vous ne pouvez donc pas utiliser un travail pour: vérifier quand ils sont détruits.

La meilleure chose à faire serait d’avoir un "dernier temps d’accès". stocké quelque part pour vos utilisateurs et utilisez-le pour détecter un délai d'attente de la session. La mise en œuvre d'un tel travail est cependant compliquée (vous pouvez manquer des événements de déconnexion si un utilisateur se connecte / se connecte rapidement, par exemple) ...

Donc, pas de solution parfaite ici.

Autres conseils

Notez bien la "manière appropriée". mais voici comment je l'ai fait dans le passé.

Avoir un " est actif " horodatage associé à l'enregistrement de l'utilisateur dans la base de données. Chaque fois que l'utilisateur accède à une page mise à jour avec l'heure actuelle. Si quelqu'un n'a pas accédé à la page depuis 15 minutes, cet utilisateur est alors enregistré sous la forme "" déconnexion". événement et l'horodatage est défini sur NULL.

Au mieux, votre enregistrement de déconnexion sera une conjecture intelligente, même si vous faites en sorte que les événements de session fonctionnent correctement, dès que l'utilisateur a quitté votre site / votre application. Une technique que vous pouvez utiliser consiste à placer l'heure de déconnexion dans la base de données lorsque l'utilisateur se connecte, et de simplement mettre à jour l'enregistrement avec une heure ultérieure lors de l'utilisation du système. Voici le schéma général d’une table de session que j’ai utilisée récemment:

[Id]  [Uid]    [LoginInOn]        [ExpiresOn]  
 1    johndoe  10/14/2008 10:47   10/14/2008 11:07  

Dans ce tableau, je ne cesse de mettre à jour la colonne ExpiresOn lorsque l'utilisateur interagit avec l'application (heure actuelle + 20 minutes). S'ils essaient d'interagir après ExpiresOn, je sais qu'ils ont été inactifs pendant 20 minutes et qu'ils ont forcé une nouvelle connexion. À des fins de rapport, je sais que l'utilisateur s'est déconnecté si l'heure actuelle est supérieure à ExpiresOn. Vous pouvez obtenir plus complexe que cela. Par exemple, je déplace mes données hors du tableau des sessions répertorié ci-dessus vers un tableau avec un processus régulier. Ceci est juste pour garder la table des sessions réduite, car beaucoup de choses interagissent avec elle.

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