2009-11-30 6 views
7

Ho problemi a creare un cookie non persistente utilizzando FormsAuthenticationTicket. Voglio memorizzare userdata nel ticket, quindi non posso usare i metodi FormsAuthentication.SetAuthCookie() o FormsAuthentication.GetAuthCookie(). Per questo motivo ho bisogno di creare FormsAuthenticationTicket e memorizzarlo in un HttpCookie.Crea cookie non persistente con FormsAuthenticationTicket

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 l'isPersistent variabile è vero tutto funziona bene e il cookie viene mantenuto. Ma quando isPersistent è falso, il cookie sembra essere persistito comunque. Accedo in una finestra del browser, lo chiudo e riapre il browser e sono ancora connesso. Come faccio a impostare il cookie come non persistente?

Un cookie non persistente è uguale a un cookie di sessione? Le informazioni sui cookie sono memorizzate nei dati di sessione sul server o il cookie è trasferito in ogni richiesta/risposta al server?

risposta

3

provare a cancellare:

if (isPersistent) { cookie.Expires = expiration; }

... e la sua sostituzione con:

if (!isPersistent) { cookie.Expires = DateTime.Now.AddYears(-1); }