2009-11-30 11 views
7

Ich habe Probleme beim Erstellen eines nicht dauerhaften Cookie mit dem FormsAuthenticationTicket. Ich möchte Benutzerdaten im Ticket speichern, daher kann ich die FormsAuthentication.SetAuthCookie() - oder FormsAuthentication.GetAuthCookie() -Methoden nicht verwenden. Aus diesem Grund muss ich das FormsAuthenticationTicket erstellen und in einem HttpCookie speichern.Erstellen Sie nicht dauerhaften Cookie mit FormsAuthenticationTicket

Mein Code sieht wie folgt aus:

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); 

Wenn die Variable isPersistent wahr ist, funktioniert alles einwandfrei und das Cookie beibehalten wird. Aber wenn isPersistent falsch ist, scheint der Cookie trotzdem bestehen zu bleiben. Ich melde mich in einem Browserfenster an, schliesse es und öffne den Browser erneut und ich bin immer noch angemeldet. Wie stelle ich den Cookie so ein, dass er nicht persistent ist?

Ist ein nicht persistenter Cookie der gleiche wie ein Session-Cookie? Werden die Cookie-Informationen in den Sitzungsdaten auf dem Server gespeichert oder wird der Cookie in jeder Anfrage/Antwort an den Server übertragen?

Antwort

3

Versuchen Löschen:

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

... und ersetzt sie durch:

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

Verwandte Themen