2010-09-20 13 views
13

En una aplicación ASP.NET MVC2, tenemos la acción de acceso estándar ...El control de la expiración FormsAuthentication createPersistentCookie

if (ValidateUser(model.Email, model.Password) 
{ 
    FormsAuthentication.SetAuthCookie(model.Email, model.RememberMe); 
    ... 

en el que el segundo parámetro a SetAuthCookie es createPersistentCookie con la siguiente documentación:

createPersistentCookie 
    Type: System.Boolean 
    true to create a persistent cookie 
    (one that is saved across browser sessions); otherwise, false. 

Nos gustaría que la cookie persistente caduque después de 2 semanas (es decir, un usuario podría volver al sitio en 2 semanas y no se le solicitará volver a autenticarse. Después de ese momento, se le solicitará que vuelva a iniciar sesión).

¿Cómo establecemos el vencimiento de la cookie persistente?

Respuesta

33

¿No puedes hacer esto?

<system.web> 
    <authentication mode="Forms"> 
      <forms timeout="20160"/> 
    </authentication> 
</system.web> 

El tiempo de espera es en minutos.

Este valor de tiempo de espera es independiente de si está creando o no una cookie persistente. Simplemente dice que si no finaliza explícitamente la cookie (FormsAuthentication.SignOut), caducará automáticamente después del período de tiempo dado.

En otras palabras, si lo hace:

FormsAuthentication.SetAuthCookie(someMembershipName, false); 

resultará en la cookie expira cuando:

  • El usuario cierra el navegador o
  • Se alcanza el tiempo de espera.

A diferencia de si lo hace:

FormsAuthentication.SetAuthCookie(someMembershipName, true); 

dará lugar a la cookie sólo expira cuando se alcanza el tiempo de espera.

HTH

EDITAR:

Tomar de las MSDN:

la tiempo de espera de atributo se describe como sigue:

Especifica el tiempo, en enteros minutos, después de lo cual la cookie expira. Si el atributo SlidingExpiration es verdadero, el atributo de tiempo de espera es un valor variable, que expira al en el número de minutos especificado después de que se recibió la última solicitud . Para evitar comprometida rendimiento, y para evitar múltiples advertencias navegador para los usuarios que tienen avisos de las cookies activadas, la cookie se actualiza cuando ha transcurrido más de la mitad de la tiempo especificado. Esto podría causar una pérdida de precisión. El valor predeterminado es "30" (30 minutos).

Nota En ASP.NET V1.1 persistente cookies no se agota el tiempo de espera, independientemente de la configuración del atributo de tiempo de espera. Sin embargo, a partir de ASP.NET V2.0, las cookies persistentes exceden el tiempo de espera de acuerdo con el atributo de tiempo de espera.

En otras palabras, esta configuración de caducidad maneja solo la cookie de autenticación de formularios.

La cookie de autenticación de formularios es una cookie del lado del cliente, no tiene nada que ver con otra sesión del lado del servidor que pueda tener (es decir, un carrito de compras).

esa sesión ha caducado con la siguiente configuración:

<sessionstate 
     mode="inproc" 
     cookieless="false" 
     timeout="20" 
+0

Mi entendimiento es que este tiempo de espera controla la caducidad de sesión. Nuestros tiempos de espera de sesión son del orden de 2 horas. No es que deseemos que la sesión dure dos semanas, sino la cookie "recordarme" para que dure ese momento. – Rob

+0

Gracias por el seguimiento. Haré algunas pruebas con Firebug y la expiración de la sesión e informaré. Mientras tanto, +1 y acepté tu respuesta. Gracias de nuevo. – Rob

+0

@Rob: no se preocupe, avíseme si encuentra algún problema (ya que usamos la configuración anterior y parece funcionar bien en todos los escenarios) – RPM1984

Cuestiones relacionadas