2009-09-24 15 views
56

En mi página web asp.net estoy usando la autenticación de forma asp.net con configuración siguienteFormas de tiempo de espera de autenticación vs espera de sesió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> 

He siguientes preguntas

  1. Lo que debería ser tiempo de espera para el valor sesión porque estoy usando la expiración 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 cerrar la autenticación de formulario me gustaría redirigir la página a logout.aspx pero me redirecciona automáticamente a loginpage.aspx. ¿Como es posible?

Respuesta

47
  1. Para estar en el lado seguro: Tiempo de espera (Sesión) < = Tiempo de espera (FormsAuthentication) * 2
  2. Si desea mostrar la página distinta a la especificada en el atributo loginUrl después del tiempo de espera de autenticación que necesita para manejar esto manualmente como ASP.NET no proporciona una manera de hacerlo.

Para lograr el # 2, puede verificar manualmente la cookie y su AutenticaciónTicket para la caducidad y redireccionar a su página personalizada en caso de que hayan expirado.
Puede hacerlo en uno de los eventos: AcquireRequestState, AuthenticateRequest.

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 
} 
+2

Gracias Dmitriy, Mi segunda pregunta: Como está escrito arriba dentro de

esa página predeterminada es "index.aspx" y el inicio de sesión es "login.aspx". Después de iniciar sesión en la página de mi panel cuando sigo siendo ideal durante 30 minutos (tiempo de espera) y luego hago clic en cualquier enlace, lo redirigiré automáticamente a la página de inicio de sesión con la siguiente URL http: // localhost: /virtualdir/Pages/Login.aspx? ReturnUrl =% 2fvirtualdir% 2fPages% 2fDashBoard.aspx Pero aquí me gustaría redirigir la página en la página de cierre de sesión donde puedo decir algo de información de cierre de sesión –

+0

Updeted the answer. –

+0

¿Puede mostrarme un ejemplo porque en mi caso tomo escenario donde establezco timeout autenticación de forma = 2 minutos mientras tiempo de sesión = 6 minutos y después de 3 minutos cuando hago clic en enlace No depura en ningún lugar incluso en "AcquireRequestState" ¿Por favor ayuda? –

24

Para los sitios que tienen una dependencia sesión, sólo tiene que cerrar la sesión de autenticación de un rancio con el evento de inicio de sesión en el 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.

+1

Parece enérgico, pero fue una buena opción para nosotros donde tener la sesión en el lugar es esencial en este momento. –

+3

No estoy seguro de que lo llame fuerte. Simplemente combina los estados de autenticación de sesión. Claro, una opción más robusta sería restaurar la sesión dado el token de autenticación. Pero si la restauración de la sesión fue una idea de último momento (es decir, extendida por todos lados), la solución más fácil es volver al usuario a una ruta conocida (inicio de sesión). –

+0

Es cierto que esta es la ruta que hemos seguido hasta que podamos hacer que las sesiones se recreen sobre la marcha. –

Cuestiones relacionadas