asp.net forms session timeout asp.net-3.5

asp.net - Tiempo de espera de autenticación de formularios frente a tiempo de espera de sesión



forms session (2)

En mi sitio web asp.net estoy usando la autenticación de formulario asp.net 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 expiración deslizante dentro de la autenticación de formulario debido a que la sesión caducará antes de la autenticación de formulario. ¿Cómo puedo protegerlo?

  2. Después de cerrar la autenticación de formaut me gustaría redirigir la página en logout.aspx pero me redirige automáticamente a loginpage.aspx. ¿Como es posible?


  1. Para estar seguro: TimeOut (Session) <= TimeOut (FormsAuthentication) * 2
  2. Si desea mostrar una página distinta a la especificada en el atributo loginUrl después del tiempo de espera de autenticación, debe manejarlo manualmente ya que ASP.NET no proporciona una forma de hacerlo.

Para alcanzar el n. ° 2, puede verificar manualmente la cookie y su AutenticaciónTicket para su vencimiento y redirigir a su página personalizada si han expirado.
Puede hacerlo en uno de los eventos: AcquireRequestState , AuthenticateRequest .

El código de muestra en el evento puede verse así:

// 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 }


Para los sitios que tienen una dependencia de sesión, simplemente puede cerrar la sesión de una autenticación obsoleta con el evento de inicio de la sesión en el archivo 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 lo hace para que la nueva sesión = nueva autenticación, punto.