2012-05-24 7 views
7

Desidero disattivare il cookie che per FormsAuthentication alla chiusura del browser. (Voglio farlo funziona come fa la sessione PHP)Asp.Net MVC3 - FormsAuthentication, Come scadere del cookie quando il browser si chiude?

Ecco il mio codice di autenticazione che si trova in Model (non controller).

modelli/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> 

e uno più domande è, ci sono 2 volte impostazione di timeout dei cookie,

nel biglietto,

DateTime.Now.AddDays(1), 

e in autenticazione nel file Web.config

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

in che modo sono diversi e quale sarà l'effetto del cookie in scadenza?

Qualcuno sa, per favore avvisami.

Grazie!

risposta

9

Non è possibile scadere il cookie quando il browser è chiuso. È possibile, tuttavia, rendere il cookie non persistente, il che significa che non salverà il cookie e quindi quando aprirai un nuovo browser avrà un nuovo cookie (tieni presente, tuttavia, che con il modo in cui la maggior parte dei browser cache non persistenti i cookie con schede, l'intero browser deve essere chiuso per questo per cancellarlo).

Per quanto riguarda la seconda domanda, la voce web.config viene utilizzata se non si specifica un timeout.

+0

Funziona! Grazie! –

+0

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

+0

@JenonD - "non funziona" è vago .. molte cose sono state discusse, cosa "non funziona" in particolare? –

0

jQuery Unload event può essere utilizzato per rilevare la chiusura del browser.

Ma questo evento si attiva anche quando: L'utente ha fatto clic su un collegamento per uscire dalla pagina o ha digitato un nuovo URL nella barra degli indirizzi. I pulsanti avanti e indietro attiveranno l'evento. Anche una ricarica della pagina creerà prima un evento di scarico.

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

risposta alla tua seconda domanda, il timeout che si imposta nel codice con esclusione l'entrata web.config.

Problemi correlati