Tak, możesz to zrobić. Przekazać informacje zakodowane w dziedzinie userData konstruktora FormsAuthenticationTicket:
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(version,
name, issueDate, expirationDate, isPersistent, yourEncodedData);
string secureTicket = FormsAuthentication.Encrypt(ticket);
Response.Cookies.Add(
new HttpCookie(FormsAuthentication.FormsCookieName, secureTicket));
Idealnie, powinno się to odbywać za pośrednictwem połączenia SSL, a ciasteczka bilet powinien być oznaczony zarówno HttpOnly i zabezpieczyć atrybutów.
Następnie, aby pobrać wartość:
FormsIdentity id = (FormsIdentity)User.Identity;
FormsAuthenticationTicket ticket = id.Ticket;
string yourEncodedInfo = ticket.UserData;
Można też po prostu ustawić własny plik cookie, odrębnej od formy biletu auth.
Jednakże przechowywanie hasła bezpośrednio w pliku cookie, nawet jeśli jest zaszyfrowane, nie jest dobrym pomysłem z punktu widzenia bezpieczeństwa. Zamiast tego użyj stanu sesji:
Session["password"] = password;
Stan sesji również używa pliku cookie, ale sam plik cookie zawiera tylko klucz. Serwer używa klucza, aby uzyskać słownik par klucz/wartość unikalny dla tej sesji, który pozostaje na serwerze (lub zostaje sparametryzowany do bazy danych, w zależności od konfiguracji).
Czy zapisałbym je w stanie sesji, gdy użytkownik został po raz pierwszy uwierzytelniony? Jak upewnić się, że sesja członkostwa wygasa w tym samym czasie co stan sesji? Będę ich potrzebował, aby pozostać zsynchronizowany, jak sądzę. –
@metalideath - Tak, zapisz je tak szybko, jak tylko będziesz w stanie. Jeśli sesja się zakończy, albo użytkownik wyczyści swoje pliki cookie (i tym samym utraci odniesienie do ich sesji) lub limit czasu sesji, konieczne będzie ponowne uwierzytelnienie użytkownika i ponowne przywrócenie hasła w sesji. – Omar
Czy stan sesji działa w środowisku wielu serwerów? –