2012-05-24 10 views
7

Quiero caducar la cookie que para FormsAuthentication cuando el navegador se cerró. (Quiero que funcione como lo hace la sesión PHP)Asp.Net MVC3 - FormsAuthentication, ¿Cómo caducará la cookie cuando cierre el navegador?

Aquí está mi código de autenticación que se encuentra en Modelo (No controlador).

Modelos/Auth.cs

FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
    1, 
    model.UserId, 
    DateTime.Now, 
    DateTime.Now.AddDays(1), 
    true, 
    model.UserId +" "+reader["lastname"], 
    FormsAuthentication.FormsCookiePath); 

string hash = FormsAuthentication.Encrypt(ticket); 
HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, hash); 

if (ticket.IsPersistent) 
{ 
    cookie.Expires = ticket.Expiration; 
} 

HttpContext.Current.Response.Cookies.Add(cookie); 

Web.config

<authentication mode="Forms"> 
    <forms name="user" timeout="60" loginUrl="~/Auth/login" path="/"></forms> 
</authentication> 
<authorization> 
    <deny users="?" /> 
</authorization> 

y uno más preguntas es, hay 2 tiempos de fraguado de tiempo de espera de cookie,

en el ticket,

DateTime.Now.AddDays(1), 

y en la autenticación en el archivo Web.config

<forms name="user" timeout="60" loginUrl="~/Auth/login" path="/"></forms> 

qué tan diferentes son, y cuál afectará a la cookie de caducidad real?

Alguien sabe, por favor, aconséjenme.

¡Gracias!

Respuesta

9

No puede caducar la cookie cuando el navegador está cerrado. Sin embargo, puede hacer que la cookie no sea persistente, lo que significa que no guardará la cookie y, por lo tanto, cuando abra un nuevo navegador tendrá una nueva cookie (tenga en cuenta que la mayoría de los navegadores no son persistentes). cookies con pestañas, todo el navegador debe estar cerrado para que esto desaparezca).

En cuanto a su segunda pregunta, la entrada web.config se utiliza si no especifica un tiempo de espera.

+0

¡Funciona! ¡Gracias! –

+0

no funciona con Chrome. var authTicket = new FormsAuthenticationTicket (1, user.EmailAddress, DateTime.Now, DateTime.Now.AddMinutes (FormsAuthentication.Timeout.TotalMinutes), false, userData, "/"); – JenonD

+0

@JenonD - "no funciona" es vago ... se discutieron muchas cosas, ¿qué "no funciona" específicamente? –

0

jQuery Unload Event se puede utilizar para detectar el cierre del navegador.

Pero este evento también se activa cuando: el usuario hizo clic en un enlace para salir de la página o ingresó una nueva URL en la barra de direcciones. Los botones de avance y retroceso activarán el evento. Incluso una recarga de página creará primero un evento de descarga.

Bind an event handler to the "unload" JavaScript event.

respuesta la segunda pregunta, el tiempo de espera que se establece en el código con anulación de la entrada web.config.

Cuestiones relacionadas