OK, aquí está mi código para crear una cookie de autenticación:problema al crear persistente cookie de autenticación: 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);
y aquí está mi código en Global.asax para configurar las funciones de usuario en la identidad del usuario:
protected void Application_AuthenticateRequest(Object sender, EventArgs e)
{
HttpCookie authCookie = Context.Request.Cookies[FormsAuthentication.FormsCookieName];
if (authCookie == null || authCookie.Value == "")
{
return;
}
FormsAuthenticationTicket authTicket = null;
try
{
authTicket = FormsAuthentication.Decrypt(authCookie.Value);
string[] roles = authTicket.UserData.Split(new char[] { ';' });
if (Context.User != null)
{
Context.User = new System.Security.Principal.GenericPrincipal(Context.User.Identity, roles);
}
}
catch
{
return;
}
}
Sin embargo, si "createPersistentCookie" es VERDADERO en el ejemplo superior, no se crea ninguna cookie persistente. Si descomiento la última línea como sigue:
//System.Web.HttpContext.Current.Response.Cookies.Add(authCookie);
FormsAuthentication.SetAuthCookie(userName, createPersistentCookie);
y luego la cookie persistente se crea en mi disco duro. PERO, en el código Global.asax, el campo UserData en "authTicket" está en blanco, ¡así que no puedo configurar los roles correctamente!
Así que tengo que usar SetAuthCookie para crear una cookie persistente, pero luego, por alguna razón, el campo UserData desaparece de la cookie persistente.
¿Cuál es la respuesta a esto?
Sí, que lo hizo! Muchas gracias. Me he estado arrancando los pelos. Ahora puedo usar Response.Cookies.Add en lugar de SetAuthCookie, y se crea una cookie persistente Y el UserData no se borra (¡extraño!) – Cynthia