ASP.NET Kill Session By Id
mon application a un contrôle des Permissions de L'utilisateur, parce que tous les utilisateurs ne peuvent pas accéder au site web complet. En ce moment, toutes ces permissions pour un utilisateur spécifique sont stockées dans sa session, parce que ce serait un problème pour moi de rechercher dans la base de données chaque Post.
le problème est que lorsque je supprime une permission, l'utilisateur peut toujours accéder à la page, et seulement quand il ferme le navigateur, la mise à jour prend effet.
y a-t-il un moyen de tuer une Session D'Application spécifique par l'ID, forçant l'utilisateur à se Connecter à nouveau?
3 réponses
"Is there a way to Kill an specific Application Session by the ID, forcing user to Log in again?"
Non. Vous ne pouvez accéder qu'à L'objet Session de l'utilisateur qui fait la requête courante (c.-à-d. vous-même), pas aux objets Session des autres utilisateurs.
ainsi, vous devez stocker l'id de l'utilisateur ailleurs, par exemple dans une collection statique. Lorsque l'utilisateur fait la requête suivante, vous pouvez vérifier si l'id est dans la collection, et mettre à jour les permissions ou déconnecter l'utilisateur.
une Autre solution serait de garder les objets d'autorisation de tous actuellement connecté utilisateurs dans une collection statique ainsi que dans leur variable Session. De cette façon, vous pourrez modifier l'objet permission sans accéder à L'objet Session de cet utilisateur.
L'utilisation de variables statiques dans une application web s'accompagne bien sûr des précautions habituelles. Comme plusieurs threads peuvent y accéder, l'accès doit être synchronisé. En outre, comme Alexei Levenkov l'a souligné, si vous avez plusieurs serveurs, vous devez garder les données synchronisées entre les serveurs.
Vous pouvez écrire Session.Abandon();
ou Session.Clear();
ou Session.SessionID[int index];
stockez la valeur de la session de l'utilisateur en particulier dans ceci et ensuite utilisez Session.Abandon();
et Session.Clear();
Pour le meurtre d'une séance particulière, essayez d'utiliser Session.Remove("key");
pour enlever un morceau particulier de Session
, puis utilisez Session.Remove()
, comme ceci:
Session.Remove("YourKey");
Note: Ceci supprime la valeur et la clé de Session
, alors que vous pouvez voir les gens utiliser Session["YourKey"] = null;
qui ne supprimera que la valeur, mais laissera la clé. Cela peut ou peut ne pas être ce que vous voulez, mais je voulais juste souligner la distinction.