Wydaje mi się, że mam proste pytanie dotyczące uwierzytelniania w asp.net mvc 4. Jedna rzecz, która nie jest dla mnie jasna, to możliwość dodawania/przekształcania danych użytkownika do pliku cookie autoryzacji. Jakie są korzyści/kompromisy związane z umieszczaniem danych użytkownika w pliku cookie służącym do uwierzytelniania w porównaniu do dodawania danych użytkownika do sesji? Czy muszę nawet umieścić coś unikalnego dla użytkownika w pliku cookie uwierzytelniającym? Czy powinienem serializować wszystkie dane użytkownika i umieścić je w pliku cookie, a nie używać sesji do przechowywania danych użytkownika?Dane użytkowników ASP.NET MVC w plikach cookie uwierzytelniania formularzy kontra sesja dodająca do sesji
Moja aplikacja jest bardzo prosta i nie ma żadnych ról. Po prostu chcę się upewnić, że w razie potrzeby będzie skalowany.
Na razie po prostu umieszczam wiadomości e-mail użytkowników w pliku cookie uwierzytelniania i dodaje obiekt użytkownika do sesji. Korzystam z następującego kodu, aby autoryzować użytkownika:
FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(
1,
user.Email,
DateTime.Now,
DateTime.Now.AddMinutes(15),
false,
user.Email); // adding the user email in the authTicket
string encTicket = FormsAuthentication.Encrypt(authTicket);
HttpCookie faCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encTicket);
Session["User"] = user; //adding user data to session
Response.Cookies.Add(faCookie);
return RedirectToAction("Summary", "Account");
Naprawdę doceniam każdy wgląd. Dzięki!
Jeśli jednak umieścisz dużo danych w pliku cookie, zostanie wysłany przy każdym żądaniu i może zjeść więcej pasma niż powinien. –
Nie, nie powinieneś wkładać dużej ilości danych. Należy umieścić tylko minimalną ilość danych, która jest używana na wszystkich stronach o użytkowniku. Jeśli potrzebujesz więcej danych, możesz zapytać swojego dostawcę profilu, aby pobrać go z bazowego magazynu danych. A jeśli chcesz uniknąć kosztownych wywołań do magazynu danych na każde żądanie, możesz użyć pamięci podręcznej na serwerze (ale będziesz musiał rozwiązać podobne problemy, jak sesja ASP.NET). –