2012-04-27 11 views
18

Estoy tratando de entender el propósito de la propiedad isPersistent que se encuentra en la clase FormsAuthenticationTicket. http://msdn.microsoft.com/en-us/library/kybcs83h.aspx¿Cuál es el propósito de FormsAuthenticationTicket isPersistent property?

  1. ¿Hay situaciones en las que configurar isPersistent funciona?
  2. ¿En qué escenarios me gustaría establecer isPersistent en verdadero y falso?

La propiedad parece ser redundante ya que he encontrado la única manera para que persista mi cookie de autenticación de usuarios a través de las sesiones del explorador es establecer la propiedad Expires de la cookie creados como consecuencia de la creación de tickets; incluso si los tickets es el valor persistente se establece en false.

También encontré que configurar el vencimiento de los tickets (no la cookie) a algo así como 10 segundos con isPersistent establecido en true tiene poco efecto; el boleto expira después de 10 segundos.

FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, 
    identity.Name, 
    DateTime.Now, 
    DateTime.Now.AddMinutes(FormsAuthentication.Timeout.TotalMinutes), 
    isPersistent, 
    JsonSerializerService.ToJson(identity), 
    FormsAuthentication.FormsCookiePath); 

string encryptedTicket = FormsAuthentication.Encrypt(ticket); 

var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket); 

cookie.Path = FormsAuthentication.FormsCookiePath; 

cookie.Expires = DateTime.Now.AddYears(1); // good for one year 

I apreciarán que puedo cambiar de código de seguridad para configurar opcionalmente expires

if (isPersistent) 
    cookie.Expires = DateTime.Now.AddYears(1); // good for one year 

Un ejemplo de aplicación se ha creado @ GitHub. https://github.com/chrismoutray/AuthSample Esto básicamente muestra que incluso al establecer el indicador isPersistent en verdadero, la autorización de cross browser no funciona.

Respuesta

9

En el marco 1.0/1.1, establecer IsPersistent en true establecería una caducidad de 50 años para la cookie.
En la versión 2.0 se modificó, por lo que la caducidad de la cookie coincide con el atributo de tiempo de autenticación de formulario. Por lo tanto, puede configurar IsPersistent como verdadero, pero la cookie siempre caducará después del período de espera de autenticación de formularios.
Su código funciona bien si desea un período de caducidad prolongado sin modificar el tiempo de espera de autenticación de formularios.

editar: He descargado su muestra y sustituye su código de galleta con

FormsAuthentication.SetAuthCookie(model.UserName, true); 

Y está funcionando como se esperaba: con dos días configurados como su forma de tiempo de espera, mi galleta expirará en dos días.

+0

Siento que me falta algo, la cookie no persistirá a menos que establezca específicamente el campo 'Expires' de las cookies. Establecer IsPersistent no tiene ningún efecto. –

+0

Si establece IsPersistent en verdadero, la cookie generada tendrá una fecha de caducidad de now + forms timeout. No es tu caso? – lnu

+0

Bueno, no, si elimino la línea 'cookie.Expires = DateTime.Now.AddYears (1);' la función de recordarme del inicio de sesión no funciona aunque isPersistent se establezca en verdadero. –

Cuestiones relacionadas