Crea cookie non persistente con FormsAuthenticationTicket
-
10-07-2019 - |
Domanda
Sto riscontrando problemi nella creazione di un cookie non persistente utilizzando il FormsAuthenticationTicket. Voglio memorizzare i dati utente nel ticket, quindi non posso usare i metodi FormsAuthentication.SetAuthCookie () o FormsAuthentication.GetAuthCookie (). Per questo motivo, devo creare il FormsAuthenticationTicket e memorizzarlo in un HttpCookie.
Il mio codice è simile al seguente:
DateTime expiration = DateTime.Now.AddDays(7);
// Create ticket
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(2,
user.Email,
DateTime.Now,
expiration,
isPersistent,
userData,
FormsAuthentication.FormsCookiePath);
// Create cookie
HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(ticket));
cookie.Path = FormsAuthentication.FormsCookiePath;
if (isPersistent)
cookie.Expires = expiration;
// Add cookie to response
HttpContext.Current.Response.Cookies.Add(cookie);
Quando la variabile isPersistent è vera, tutto funziona correttamente e il cookie è persistente. Ma quando isPersistent è falso, il cookie sembra comunque persistere. Accedo in una finestra del browser, la chiude e riapre il browser e ho ancora effettuato l'accesso. Come posso impostare il cookie in modo che non sia persistente?
Un cookie non persistente è uguale a un cookie di sessione? Le informazioni sui cookie sono memorizzate nei dati di sessione sul server o i cookie sono trasferiti in ogni richiesta / risposta al server?
Soluzione
Prova a eliminare:
if (isPersistent)
{cookie.Expires = scadenza; }
... e sostituendolo con:
if (! isPersistent) {
cookie.Expires = DateTime.Now.AddYears (-1); }