2012-10-08 44 views
5

Creo que entiendo la diferencia entre la "sesión" de ASP.NET y la "autenticación de formularios". La sesión se utiliza básicamente para almacenar información específica de la sesión de ese usuario (tal vez el estado de un filtro de búsqueda), y la autenticación de formularios se utiliza para recordar que deben tener acceso a ciertas cosas.¿Por qué configurar el tiempo de espera de autenticación de formularios más tiempo que el tiempo de espera de la sesión?

Mi pregunta es, ¿por qué es deseable que los formularios de tiempo de espera de autenticación sean más largos que el tiempo de espera de la sesión? De hecho, de forma predeterminada, web.config establece que el tiempo de espera de autenticación de formularios sea mucho más más largo.

Éstos son los 2 escenarios que veo: tiempos

  1. de sesión antes de las formas de autenticación hace. El usuario pierde cosas como los filtros de búsqueda y, aunque todavía puede ver páginas seguras, las cosas pueden parecer diferentes y es posible que se restablezcan varias cosas. Además, el desarrollador tiene que preocuparse de que Session se vuelva null cada vez que lo use.
  2. La autenticación de los formularios expira antes de que la sesión lo haga. El usuario debe volver a ingresar el nombre de usuario y la contraseña, pero vuelve a la página en la que se encontraba y con la información de la sesión intacta (a menos que también haya agotado el tiempo de espera). El desarrollador solo tiene que preocuparse de que Session sea null en un solo lugar, al iniciar sesión, y puede inicializarlo allí si es necesario.

¿Por qué el escenario 1) sería más deseable? ¿Me estoy perdiendo de algo?

Respuesta

5

El problema es que el tiempo de espera de la sesión es más crítico que el otro. Establecer el tiempo de espera de autenticación en un período muy largo no afectará la aplicación web en los recursos del servidor. Pero si configura el tiempo de espera de la sesión en un período prolongado, esto podría ocasionar problemas de memoria en las apuestas altas.

Usted tiene razón sobre su declaración. Como desarrollador, preferiría 2 sobre 1. Sin embargo, hay una manera fácil de manejar la caducidad de la sesión. Mira esto SO question. Una de las respuestas tiene una buena solución para la expiración de la sesión.

protected void Session_Start(Object sender, EventArgs e) 
{ 
    if (User.Identity.IsAuthenticated) 
    { 
     FormsAuthentication.SignOut();       
     Response.Redirect("~/SessionEnd.aspx"); 
    } 
} 

De esta manera puede manejar las sesiones caducadas en un solo lugar.

+1

Vale la pena señalar además que es una muy buena idea hacer * todo * acceso de 'sesión' en una clase en la aplicación web, y hacer que la clase siempre verifique si 'Session' es nula y reiniciar si es necesario . – Jez

Cuestiones relacionadas