Tiempo de Espera de Autenticación de Formularios vs Tiempo de Espera de Sesión


En mi asp.net sitio web que estoy utilizando asp.net autenticación de formularios con la siguiente configuración

<authentication mode="Forms">
    <forms loginUrl="~/Pages/Common/Login.aspx"
           defaultUrl="~/Pages/index.aspx"
           protection="All"
           timeout="30"
           name="MyAuthCookie"
           path="/"
           requireSSL="false"
           cookieless="UseDeviceProfile"
           enableCrossAppRedirects="false" >
    </forms>
</authentication>

Tengo las siguientes preguntas

  1. Cuál debería ser el valor de tiempo de espera para la sesión porque estoy usando la caducidad deslizante dentro de la autenticación del formulario debido a que la sesión expirará antes de la autenticación del formulario. ¿Cómo puedo protegerlo?

  2. Después de formauthentication cerrar sesión me gustaría redirigir la página al cerrar sesión.aspx pero me redirige automáticamente en loginpage.aspx. ¿Cómo es posible?

Author: GaTechThomas, 2009-09-24

2 answers

  1. Para estar en el lado seguro: TimeOut (Session)
  2. Si desea mostrar una página que no esté especificada en el atributo loginUrl después del tiempo de espera de autenticación, debe manejar esto manualmente como ASP.NET no proporciona una forma de hacerlo.

Para lograr el #2, puede verificar manualmente la caducidad de la cookie y su AuthenticationTicket y redirigirla a su página personalizada si ha caducado.
Puedes hacerlo en uno de los eventos: AcquireRequestState, AuthenticateRequest.

El código de ejemplo en el evento puede verse como:

// Retrieve AuthenticationCookie
var cookie = Request.Cookies[FormsAuthentication.FormsCookieName];
if (cookie == null) return;
FormsAuthenticationTicket ticket = null;
try {
    ticket = FormsAuthentication.Decrypt(cookie.Value);
} catch (Exception decryptError) {
    // Handle properly
}
if (ticket == null) return; // Not authorised
if (ticket.Expiration > DateTime.Now) {
    Response.Redirect("SessionExpiredPage.aspx"); // Or do other stuff here
}
 47
Author: Dmytrii Nagirniak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-16 22:41:46

Para los sitios que tienen una dependencia de sesión, simplemente puede cerrar sesión en una autenticación obsoleta con el evento inicio de sesión en global.asax:

void Session_Start(object sender, EventArgs e)
{
  if (HttpContext.Current.Request.IsAuthenticated)
  {

    //old authentication, kill it
    FormsAuthentication.SignOut();
    //or use Response.Redirect to go to a different page
    FormsAuthentication.RedirectToLoginPage("Session=Expired");
    HttpContext.Current.Response.End();
  }

}

Esto hace que new session = new authentication, punto.

 24
Author: b_levitt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-05-31 14:22:50