2009-10-21 4 views
3

J'ai une application ASP.NET MVC s'exécutant sur IIS7. J'utilise des sessions pour suivre les utilisateurs connectés. Il y a une session nommée IsSignedIn. ("true" signifie que cet utilisateur est actuellement connecté). J'ai également une page d'administration pour mon application.Forcer un utilisateur connecté à se reconnecter en invalidant sa session

Maintenant, disons que l'utilisateur1 déjà connecté doit être suspendu de l'utilisation immédiate du service. Je veux donc invalider les variables de session définies pour user1 depuis ma page d'administration (cela forcera l'utilisateur à se reconnecter).

Y a-t-il un moyen d'accéder/modifier les variables de session définies par chaque utilisateur connecté depuis ma page d'administration?

Répondre

6

Vous ne pouvez pas modifier une variable de session d'une autre session. Une solution à votre problème consiste à stocker une liste d'utilisateurs connectés dans l'objet Application, puis à modifier la valeur de cette variable. Pour que cela fonctionne, vous devez vérifier en haut de chaque page que cet utilisateur figure dans la liste des utilisateurs connectés.

Comme çağdaş commenté sur cette réponse, la performance serait probablement mieux si vous stockez une liste d'utilisateurs que vous souhaitez vous déconnecter dans votre variable d'application. Ensuite, sur le haut de votre page faire quelque chose comme ça (pseudo, ce actuall extrait de code ne fonctionnera pas)

if(Application["SuspendedUsers"].Contains(Session["UserID"]) { 
    Session["IsSignedIn"] = false; 
    Application["SuspendedUsers"].Remove(Session["UserID"]); 
} 
+0

Ou stocker une liste d'utilisateurs suspendus, qui serait probablement plus petit que les utilisateurs connectés. –

+0

Le problème avec cela est que cela implique que * quiconque * n'est pas explicitement exclu est authentifié. Mon cousin Bob n'a probablement pas besoin d'accéder à votre site. –

+0

+1. L'objet Application devrait fonctionner correctement pour cela. L'objet Cache fonctionnera également et permettra un peu plus de flexibilité. –

0

Où est votre état de session stockée? Si c'est dans le serveur SQL, vous devriez pouvoir l'invalider en mettant à jour la ligne correspondante dans la base de données. Le serveur d'état de session standard ne semble toutefois pas autoriser cela.

Vous pouvez également vérifier votre base de données en haut de chaque page pertinente pour voir si l'utilisateur a toujours les droits/est authentifié.

Questions connexes