13

OK, hier ist mein Code einen Authentifizierungs-Cookie zu erstellen:Problem Erstellen von persistenter Authentifizierungscookie: ASP.NET MVC

 // get user's role 
     List<UserType> roles = rc.rolesRepository.GetUserRoles(rc.userLoginRepository.GetUserID(userName)); 
     List<string> rolesList = (from r in roles 
           select r.ToString()).ToList(); 
     string[] rolesArr = rolesList.ToArray(); 

     // create encryption cookie 
     FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(
       1, 
       userName, 
       DateTime.Now, 
       DateTime.Now.AddDays(90), 
       createPersistentCookie, 
       String.Join(";",rolesArr) //user's roles 
       ); 

     // add cookie to response stream 
     string encryptedTicket = FormsAuthentication.Encrypt(authTicket); 

     System.Web.HttpCookie authCookie = new System.Web.HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket); 
     System.Web.HttpContext.Current.Response.Cookies.Add(authCookie); 
     //FormsAuthentication.SetAuthCookie(userName, createPersistentCookie); 

Und hier ist mein Code in Global.asax die Benutzerrollen in die Benutzeridentität zu setzen:

Wenn jedoch createPersistentCookie im oberen Beispiel TRUE ist, wird kein persistenter Cookie erstellt. Wenn ich die letzte Zeile wie folgt auskommentiere:

 //System.Web.HttpContext.Current.Response.Cookies.Add(authCookie); 
     FormsAuthentication.SetAuthCookie(userName, createPersistentCookie); 

dann wird der dauerhafte Cookie auf meiner Festplatte erstellt. ABER dann im Global.asax-Code ist das UserData-Feld in "authTicket" leer, so dass ich die Rollen nicht richtig einrichten kann!

Also muss ich SetAuthCookie verwenden, um einen dauerhaften Cookie zu erstellen, aber aus irgendeinem Grund verschwindet das Feld UserData aus dem persistenten Cookie.

Was ist die Antwort darauf?

Antwort

17

Um ein dauerhaftes Cookie zu erstellen, müssen Sie die Expires Eigenschaft setzen:

if (authTicket.IsPersistent) 
{ 
    authCookie.Expires = authTicket.Expiration; 
} 
+0

Ja, das tat es! Vielen Dank. Ich habe mir die Haare ausgerissen. Jetzt kann ich die Response.Cookies.Add anstelle von SetAuthCookie verwenden, und ein persistentes Cookie wird erstellt, UND die UserData wird nicht ausgeblendet (seltsam!) – Cynthia