2010-06-14 16 views
8

Czy jest to możliwe w Asp.NET MVC do profatycznego wylogowania użytkownika? Mam świadomość, że możesz użyć:programowo wylogować "konkretnego" użytkownika

FormsService.SignOut(); 

Ale to odnosi się do kontekstu strony, która zgłasza żądanie. Próbuję zapobiec dwukrotnemu zalogowaniu użytkownika. Więc jeśli zadzwonię:

MembershipUser membershipUser = Membership.GetUser(userName); 
if (membershipUser.IsOnline == true) 
{ 
    // log this user out so we can log them in again 
    FormsService.SignOut();  
} 

Wywołanie FormsService.SignOut(); nie ma znaczenia w kontekście użytkownika powiedzieć, z innej przeglądarce internetowej, który jest zalogowany w już?

Odpowiedz

2

jednej wspólnej metody do osiągnięcia tego celu jest na każdej stronie obciążenia, należy sprawdzić, czy bieżący użytkownik musi być wylogowany.

if (User.Identity.IsAuthenticated && UserNeedsToSignOut()) 
{ 
    FormsAuthentication.SignOut(); // kill the authentication cookie: 
    Response.Redirect("~/default.aspx"); // make sure you redirect in order for the cookie to not be sent on subsequent request 
} 

można obawiać się, że ta metoda będzie zbyt powolne,

„Dlaczego muszę nazwać tę przeklętą funkcję każdego ładowania strony? To prawdopodobnie trafia do bazy danych za każdym razem!”

Nie musi być powolna. Możesz przechowywać w pamięci podręcznej listę użytkowników, którzy nie powinni być zalogowani w danym momencie. Jeśli ich nazwa użytkownika znajduje się w tej pamięci podręcznej, kod wylogowania zostanie wyzwolony następnym razem, gdy wejdą na stronę.

Powiązane problemy