2013-03-14 16 views
6

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!

Odpowiedz

12

Problem z sesją ASP.NET polega na tym, że domyślnie jest ona przechowywana w pamięci. Oznacza to, że jeśli używasz farmy internetowej, będziesz musiał użyć trwałości poza procesem w swojej sesji, w przeciwnym razie nie wszystkie węzły w twoim farmie będą miały te same informacje. Musisz więc utrzymywać sesje na serwerze SQL, co jest znacznie droższe niż po prostu odczytanie danych użytkownika z pliku cookie uwierzytelniania formularzy.

Innym ważnym aspektem dotyczącym ASP.NET Session jest to, że jeśli kiedykolwiek zdecydujesz się go użyć (osobiście nigdy go nie użyję), będziesz musiał upewnić się, że jego limit czasu jest taki sam, jak czas ważności ciasteczka formularza, w przeciwnym razie plik cookie może wygasają, ale dane użytkownika nadal są obecne w sesji lub, co gorsza, sesja może wygasnąć, ale plik cookie uwierzytelniania formularzy jest nadal ważny.

Tak więc na koniec dnia będziesz musiał rozwiązywać znacznie bardziej złożone problemy, jeśli kiedykolwiek zdecydujesz się na korzystanie z sesji ASP.NET, niż początkowo miałeś (co miało na celu utrzymanie pewnych informacji o użytkownikach we wszystkich żądaniach).

+0

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. –

+1

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). –

Powiązane problemy