ASP.NET: Comment obtenir l'objet FormsAuthenticationTicket lorsque l'authentification a expiré
-
11-10-2019 - |
Question
Je suis en train de vérifier la propriété de Périmé FormsAuthenticationTicket actuelle de l'utilisateur pour voir si la période d'authentification a expiré. Mais lorsque la période est arrivé à expiration, je ne suis jamais en mesure d'obtenir suffisamment d'informations pour créer même le billet pour vérifier. Je l'ai essayé ceci:
FormsIdentity id = (FormsIdentity)User.Identity;
FormsAuthenticationTicket ticket = id.Ticket;
L'utilisateur est nulle lorsque la période d'authentification a expiré. Donc, cela ne fonctionnera pas. Je l'ai essayé ceci:
HttpCookie authCookie = context.Request.Cookies[FormsAuthentication.FormsCookieName];
FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value);
Mais les formes Cookie est disparu lorsque la période d'authentification a expiré, ce qui signifie authcookie sera nulle. Donc, cela ne fonctionne pas.
Est-il possible de réellement get l'objet FormsAuthenticationTicket à l'expiration de la période d'authentification? Il doit y avoir, parce qu'il ya une propriété « Périmé » dans l'objet. Qu'est-ce que je manque?
Merci.
La solution
Un biscuit expiré est laissé sur les en-têtes par le navigateur client. Donc, il n'y a pas de code-behind méthode de la récupération depuis le client ne sera jamais à vous donner. Il pourrait être possible d'utiliser les cookies javascript pour récupérer les données de cookie premières et le mettre dans un en-tête de courrier ou appel AJAX dans un but, mais je crois que le mécanisme des cookies javascript a les mêmes restrictions d'expiration que le navigateur. les cookies arrivés à expiration ne sont plus valables, et donc pas accessible.
Autres conseils
En supposant que le navigateur (IE uniquement) ne supprime pas expiré cookies , ASP.Net semble dépouiller une authentification expiré billet de la collection Request.Cookies. Il est toujours là dans le Request.Header [ « Cookie »], mais non disponible dans la collection de cookies. Je crois que cela se produit quelque part entre le « BeginRequest » et les événements « AuthenticateRequest ». Je suis en cours d'exécution dans le même problème et je explorer davantage moi-même.
void context_BeginRequest(object sender, EventArgs e)
{
string cookie = ((HttpApplication)sender).Context.Request.Cookies[".ASPXFORMSAUTHSS"].Value;
FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(cookie);
}