2012-04-27 15 views
18

Sto cercando di capire come funziona la proprietà isPersistent trovata nella classe FormsAuthenticationTicket. http://msdn.microsoft.com/en-us/library/kybcs83h.aspxQual è lo scopo della proprietà FormsAuthenticationTicket isPersistent?

  1. Esistono scenari durante l'impostazione di isPersistent?
  2. In quali scenari si desidera impostare isPersistent su true e false?

La proprietà sembra essere ridondante da quando ho trovato l'unico modo per me a persistere il cookie di autenticazione utenti attraverso sessioni del browser è quello di impostare la proprietà Expires del cookie creati dopo la creazione di biglietti; anche se il ticket è il valore persistente è impostato su false.

Inoltre, ho riscontrato che l'impostazione di scadenza dei ticket (non del cookie) su qualcosa come 10 secondi con isPersistent impostata su true ha scarso effetto; il biglietto scade dopo 10 secondi.

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 

mi rendo conto che posso cambiare il mio codice qui sopra per impostare facoltativamente expires

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

Un esempio di applicazione è stata creata @ GitHub. https://github.com/chrismoutray/AuthSample Ciò dimostra che anche impostando il flag isPersistent su true l'autorizzazione cross-browser non funziona.

risposta

9

Nel framework 1.0/1.1, l'impostazione di IsPersistent su true imposterà una scadenza di 50 anni nel cookie.
Nella versione 2.0 è stato modificato in modo che la scadenza del cookie corrisponda all'attributo timeout di autenticazione del modulo. Quindi puoi impostare IsPersistent su true ma il cookie scadrà sempre dopo il periodo di timeout di autenticazione del modulo.
Il codice esegue il trucco se si desidera un lungo periodo di scadenza senza modificare il timeout di autenticazione dei moduli.

edit: Ho scaricato il vostro campione e sostituito il codice cookie con

FormsAuthentication.SetAuthCookie(model.UserName, true); 

E sta funzionando come previsto: con due giorni configurati come timeout modulo, il mio biscotto scade tra due giorni.

+0

Mi sento come se mi mancasse qualcosa, il cookie non persisterà a meno che non imposti specificamente il campo "Scadenti". L'impostazione IsPersistent non ha alcun effetto. –

+0

Se si imposta IsPersistent su true, il cookie generato avrà una data di scadenza ora + timeout moduli. Non è il tuo caso? – lnu

+0

Bene no - se rimuovo la riga 'cookie.Expires = DateTime.Now.AddYears (1);' la mia funzione remember-me del login non funziona anche se isPersistent è impostato su true. –

Problemi correlati