J'ai une standard donc je ne peux pas obtenir comment nous pouvons vous déconnecter lorsque la session se termine ... < / forte> p> dans httpcontext code> est
null code>. (Je veux dire ici
httpcontext code>
6 Réponses :
Un appel à session_end () strong> provoque l'exception. Cela est totalement attendu car vous ne pouvez pas simplement créer Vous devez enregistrer les utilisateurs en réponse à une demande qu'ils ont apportée. Créez un nouveau projet MVC avec l'authentification des comptes individuels. Ouvrez CompteController Strong> et jetez un coup d'œil à la méthode ici également dans l'application ASP.NET /MVC par défaut, déclare espère que cela aide. P> p> Nouveau CompteController () code>, appelez
CompteController.signout () code> et attendez-vous à fonctionner. Ce nouveau contrôleur n'est pas utilisé dans le pipeline MVC - il n'a pas httpContext et toutes ses autres exigences pour pouvoir fonctionner.
logoff () code>: p>
authentificationmanager.signout ( ) code> sera exécuté en réponse à une demande postale sur / compte / déconnexion. Chaque fois qu'une telle demande arrive, ASP.NET/MVC créera une instance de comptyController et l'initialisera correctement. Après cela, la méthode de la déconnexion sera appelée où vous pouvez réellement exécuter
authentificationmanager.signout (); code>. P>
Oui je suis d'accord. Nous avons cette méthode par défaut mais je voudrais forcer à déconnecter un utilisateur et à le rediriger vers la page de connexion. J'ai donc besoin de solution pour le faire avec Owin. Quoi qu'il en soit, merci de votre avis!
@Clarkkent Cette solution le fait avec Owin, j'ai édité la réponse pour expliquer comment cela le fait. S'il vous plaît voir les modifications en attente. Milan explique pourquoi cela jette une erreur avant de vous déconnecter de vos utilisateurs.
Eh bien ... ijust code commenté dans session_end code> et je suis confronté à un comportement étrange de l'application. Je mets SessionTimeout 1 min. Quand je me connecte et que je ne fais rien, ça marche bien. Donc, 1 min plus tard, lorsque je rafraîchis les pages, il se déconnecte et redirige vers la page de connexion. Mais si pendant 2-3 minutes. Je navigue dans le site Web, cela ne fonctionne pas. :)
@Clarkkent êtes-vous activement naviguer dans le site Web pendant ces 2-3 minutes? Avez-vous essayé d'aller à une page différente, assise pendant une minute et ensuite bouger? Si tel est le cas, essayez de sortir votre variable de session pour voir si elle est toujours définie ou réinitialisée. Cette fonction ou votre fonction qui enregistre l'utilisateur n'est pas appelée lorsque vous naviguez vers une page différente.
Oui. J'utilise différentes pages pour naviguer. Ainsi, lorsque l'utilisateur est actif d'une application d'une manière active (ASP.NET MVC) ignore un intervalle d'extirpation 1 min ...
Bien. Je peux confirmer que la configuration fonctionne comme si l'utilisateur est inactif pendant 1 min, il forcera à vous déconnecter de l'utilisateur et, sinon, l'utilisateur peut travailler et que l'intervalle d'expiration n'a pas d'impact.
Au moins la logique derrière la pièce de déconnexion fonctionne. Je pense que si vous découvrez comment faire appel à cet appel aux autres parties du programme, cela fonctionnera. Avez-vous essayé de définir le délai d'attente dans votre web.config b>?
Laissez-nous Continuez cette discussion en chat .
Votre code est un peu un morceau, mais même si vous obtenez les appels pour peupler le contexte, vous pouvez toujours faire face à un problème distinct, comme indiqué dans certaines demandes de bogues sur le site Codéplex. katanaproject.codeplex.com/workitem/356 . Vous devez appeler authentificationmanager.signout (DefaultAuthenticationTypes. Application lindiccookie); pas seulement authentificationmanager.signout ();
Après avoir utilisé la bibliothèque personnalisée pour réparer le problème de la cookie avec Owin, ce commentaire corrige mes problèmes de déconnexion! Peut-être que cette tour se tiendra une semaine ...
Pour cela, vous devez définir un attribut Actionfilter et vous devez rediriger l'utilisateur à l'action du contrôleur respective. Vous devez vérifier la valeur de la session et si son NULL, alors vous devez rediriger l'utilisateur. Voici le code ci-dessous ( aussi Vous pouvez visiter mon blog pour le détail étape ):
En supposant que vous utilisiez ApplicationCookie pour stocker vos informations de connexion.
AuthenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie);
Il dit que l'Authmanager n'a pas de méthode Signout code>
Vous pouvez essayer avec var ctx = demande.getowincontext (); Var AuthenticationManager = CTX.Authentification; authentificationmanager.signout (DefaultAuthentisticationTypes.app lindiccookie);
@Phil il suffit de supprimer le cookie. La page ne redirige pas de la page de connexion Sauf Refresh Y a-t-il un moyen d'invalider l'identité après la détection de la même demande?
@msz Oui, j'ai compris que l'année dernière, haha
J'ai essayé tout cela: mais enfin cela résolu mon problème: p> CHeck P> P>
Session.Abandon(); var owinContext = System.Web.HttpContext.Current.Request.GetOwinContext(); var authenticationTypes = owinContext.Authentication.GetAuthenticationTypes(); owinContext.Authentication.SignOut(authenticationTypes.Select(o => o.AuthenticationType).ToArray()); ```
Ceci a fonctionné pour moi Le seul problème que j'ai est qu'il n'y a pas de redirection pour vous connecter, donc je reçois une vue non trouvée erronée car la vue que j'ai déconnecté est sous un [Autoriser] attribut. Je pensais que la redirection automatique a été intégrée lorsqu'un utilisateur n'est pas autorisé par ce bloc de code ... p>