2013-02-17 20 views
6

Sto usando ASP.NET MVC e voglio essere in grado di loggare automaticamente qualcuno quando ritornano al sito (esattamente come fa questo sito).Scadenza persistente del cookie impostata su Session in asp.net mvc?

Quando un utente primi registri o accede ho impostato il cookie come segue:

FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
    1, 
    "playerid", 
    DateTime.Now, 
    DateTime.Now.AddMinutes(1), //This will be set to a longer period in live... 
    true, 
    Username + "|" + item.PlayerID.ToString(), 
    FormsAuthentication.FormsCookiePath); 

string encTicket = FormsAuthentication.Encrypt(ticket); 
Response.Cookies.Add(new HttpCookie(FormsAuthentication.FormsCookieName, encTicket)); 

Se risulto questo accedendo come utente e poi guardare la scheda Cookies nel Firebug poi la scadenza è impostata a Session. Se chiudo il browser e torno al mio sito non sono più loggato. Questo è quello che mi aspetterei quando la sessione termina quando il browser è chiuso (ma non è quello che voglio che succeda!).

Tuttavia, se accedo e navigo sul sito, dopo un minuto la scadenza non viene più visualizzata come Session ma appare come un timbro data effettivo. Se poi chiudo il browser e torno al mio sito, ho effettuato l'accesso automatico.

In sintesi, sembra che la mia scadenza sia impostata su Session fino alla data di scadenza effettiva che ho stabilito i passaggi (t + 1 min in questo caso) e sono stato attivo sul sito (sto usando la scadenza scorrevole).

Qualche idea su come posso impostare la scadenza su cosa sto affermando nel ticket FormsAuthentication (e non mostrare come Session)?

risposta

9

È necessario creare un persistent cookie che viene memorizzato sul disco rigido del client impostando la proprietà Expires:

var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encTicket) 
{ 
    // setting the Expires property to the same value in the future 
    // as the forms authentication ticket validity 
    Expires = ticket.Expiration 
}; 
Response.Cookies.Add(cookie); 

Assicurarsi di aver specificato lo stesso timeout di scadenza per il cookie e il ticket di autenticazione moduli. Ora, quando si guarda con Firebug si vedrà che il quando il cookie viene emessa la proprietà Expires viene impostata in futuro che farà il cookie persistenti e sopravvivere il browser riavvii:

Set-Cookie: ASPXAUTH=...; Expires=Tue, 15-Jan-2014 21:47:38 GMT; Path=/; HttpOnly 
+0

Wow! Funziona perfettamente. Adoro questo sito! Grazie Darin –

+0

Per aiutare a capire la differenza tra cookie e ticket, questo vale una rapida occhiata http://support.microsoft.com/kb/910443?wa=wsignin1.0 –

+0

Grazie per il collegamento. Questo mi aiuta a capirlo meglio –