Pregunta

Estoy tratando de comprobar la propiedad caducado de FormsAuthenticationTicket actual del usuario para ver si ha expirado el periodo de autenticación. Pero cuando ha expirado el período, nunca estoy capaz de obtener suficiente información para crear incluso el billete para comprobar. He intentado esto:

FormsIdentity id = (FormsIdentity)User.Identity;
FormsAuthenticationTicket ticket = id.Ticket;

Pero usuario es nula cuando ha expirado el periodo de autenticación. Por lo que no funciona. He intentado esto:

HttpCookie authCookie = context.Request.Cookies[FormsAuthentication.FormsCookieName];
FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value);

Sin embargo, las formas de la galleta se había ido cuando ha expirado el periodo de autenticación, lo que significa authCookie será nulo. Por lo que no funciona.

¿Hay alguna forma de realidad get el objeto FormsAuthenticationTicket cuando ha expirado el periodo de autenticación? Tiene que haber, porque no hay una propiedad "caducado" en el objeto. ¿Qué me falta?

Gracias.

¿Fue útil?

Solución

Una expirado cookie se queda fuera de los encabezados por el navegador del cliente. Así que no hay código subyacente método de recuperación que desde que el cliente nunca se le dará a usted. Podría ser posible utilizar cookies javascript para recuperar los datos de las cookies primas y ponerlo en una cabecera de mensaje o una llamada AJAX para algún propósito, pero creo que el mecanismo de JavaScript cookie tiene las mismas restricciones de caducidad como el navegador. galletas caducadas ya no son válidas, y por lo tanto no es accesible.

Otros consejos

Si se asume que el navegador (IE solamente) no elimina una expiró cookies , ASP.Net parece despojar a una autenticación caducado boleto de la colección Request.Cookies. Todavía hay en el Request.Header [ "cookies"], pero no está disponible en la colección de cookies. Creo que esto sucede en algún momento entre los eventos "AuthenticateRequest" "BeginRequest" y. Estoy corriendo en el mismo tema y estoy explorando aún más a mí mismo.

    void context_BeginRequest(object sender, EventArgs e)
    {
        string cookie = ((HttpApplication)sender).Context.Request.Cookies[".ASPXFORMSAUTHSS"].Value;
        FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(cookie);
    }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top