Sí, puedes hacer eso. Se pasa la información codificada en el campo userData del constructor FormsAuthenticationTicket:
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(version,
name, issueDate, expirationDate, isPersistent, yourEncodedData);
string secureTicket = FormsAuthentication.Encrypt(ticket);
Response.Cookies.Add(
new HttpCookie(FormsAuthentication.FormsCookieName, secureTicket));
Idealmente, esto debe hacerse a través de una conexión SSL, y la cookie de entradas debe ser marcado tanto con los atributos HTTPOnly y seguro.
Entonces, para recuperar el valor:
FormsIdentity id = (FormsIdentity)User.Identity;
FormsAuthenticationTicket ticket = id.Ticket;
string yourEncodedInfo = ticket.UserData;
También puede simplemente establecer su propia galleta, separado del billete formas de autenticación.
Sin embargo, almacenar una contraseña directamente en una cookie, incluso si está encriptada, no es una buena idea desde el punto de vista de la seguridad. En su lugar, utilizar el estado de sesión:
Session["password"] = password;
estado de la sesión también utiliza una cookie, pero la cookie en sí sólo contiene una clave. El servidor utiliza la clave para obtener un diccionario de pares clave/valor únicos para esa sesión, que permanecen en el servidor (o se serializan en la base de datos, dependiendo de cómo esté configurado).
¿Los guardaré en el estado de la sesión cuando el usuario se autenticó por primera vez? ¿Cómo se asegura de que la sesión de membresía caduque al mismo tiempo que la sesión? Los necesitaría para estar sincronizados, creo. –
@metalideath - Sí, guárdelos tan pronto como pueda. Si la sesión finaliza, ya sea porque el usuario borre sus cookies (y pierda así cualquier referencia a su sesión) o el servidor agote el tiempo de espera de la sesión, tendrá que volver a autenticar al usuario y restaurar la contraseña en la sesión nuevamente. – Omar
¿Funciona el estado de la sesión en un entorno de servidor múltiple? –