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.

Était-ce utile?

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);
    }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top