2013-11-27 27 views
5

Używam standardowej funkcji członkostwa w ASP.NET MVC 4.ASP.NET MVC 4 Jak działa członkostwo "Zapamiętaj mnie"?

Mam formularz logowania, który po pomyślnym zalogowaniu użytkownika, niektóre informacje użytkownika są pobierane z bazy danych i umieszcza w zmiennej sesji, które I używać w niektórych częściach aplikacji.

Mój problem jest następujący:

Kiedy uaktywnić „Zapamiętaj mnie” opcja działa dobrze, ale zmienna sesja nie będzie nigdy być ładowane bo ten jest rzeczywiście ładowany podczas procesu uwierzytelniania logowania, która jest obecnie pomijana.

Moje pytanie brzmi: czy istnieje sposób na złapanie procesu weryfikacji "Zapamiętaj mnie", aby umieścić mój niestandardowy kod, który załaduje zmienną sesji, której potrzebuję? (Albo dodając więcej informacji do „Remember Me” cookie, które mogę wykorzystać później?)

Dziękuję

+0

Napraw mnie źle, to co robisz, to po zalogowaniu się wracasz do obiektu zawierającego pewne informacje i umieszczasz go w sesji. Po utworzeniu plików cookie autoryzacji ustaw datę wygaśnięcia i umieść ją w odpowiedzi. Ustawiasz również limit czasu na elemencie auth formularza w web.config (powiedzmy 5 dni). Teraz możesz ominąć uwierzytelnianie, wysyłając uwierzytelnione pliki cookie. Jeśli to prawda, wierzę, że twój obiekt powinien być nadal przechowywany w sesji? Pytanie brzmi: czy potrzebujesz obiektu, czy potrzebujesz nowego, nawet używając mnie pamiętasz? – Anton

Odpowiedz

5

W swoim scenariuszu można użyć session_start zdarzenie global.asax do wypełnienia informacji użytkownika.

public class Global : System.Web.HttpApplication 
{ 
    protected void Session_Start(object sender, EventArgs e) 
    { 
     if (HttpContext.Current.User != null && 
      HttpContext.Current.User.Identity.IsAuthenticated && 
      HttpContext.Current.Session["MyUserInfo"] == null) 
     { 
      // Get the user's information from database and save it to Session. 
      HttpContext.Current.Session["MyUserInfo"] = "johndoe"; 
     } 
    } 
}