c# - ejemplo - ¿Cuál es el propósito de FormsAuthenticationTicket isPersistent property?
forms authentication cookie (1)
En el marco 1.0 / 1.1, establecer IsPersistent en true establecería un vencimiento de 50 años para la cookie.
En la versión 2.0 se cambió, por lo que la caducidad de la cookie coincide con el atributo de tiempo de espera de autenticación del formulario. Por lo tanto, puede establecer IsPersistent en verdadero, pero la cookie siempre caducará después del período de espera de autenticación del formulario.
Su código hace el truco si desea un largo período de caducidad sin modificar el tiempo de espera de autenticación de formularios.
Edición: he descargado su muestra y he reemplazado su código de cookie con
FormsAuthentication.SetAuthCookie(model.UserName, true);
Y funciona como se esperaba: con dos días configurados como el tiempo de espera de su formulario, mi cookie caducará en dos días.
Estoy tratando de entender el propósito de la propiedad isPersistent
encuentra en la clase FormsAuthenticationTicket
. http://msdn.microsoft.com/en-us/library/kybcs83h.aspx
- ¿Hay escenarios al configurar trabajos isPersistentes?
- ¿En qué escenarios querría establecer
isPersistent
to true y false?
La propiedad parece ser redundante, ya que he encontrado que la única forma en que puedo conservar la cookie de autenticación de mis usuarios en las sesiones del navegador es establecer la propiedad Expires
de la cookie creada después de la creación del ticket; incluso si el valor isPersistent de los tickets se establece en false
.
También descubrí que establecer la caducidad de los tickets (no la cookie) en unos 10 segundos con isPersistent
set en true tiene poco efecto; El ticket 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
Aprecio que puedo cambiar mi código anterior para establecer opcionalmente expires
if (isPersistent)
cookie.Expires = DateTime.Now.AddYears(1); // good for one year
Se ha creado una aplicación de ejemplo @ GitHub. https://github.com/chrismoutray/AuthSample Esto básicamente muestra que incluso al establecer el indicador isPersistent en verdadero no funciona la autorización entre navegadores.