2010-03-03 11 views
7
protected void Button2_Click(object sender, System.EventArgs e) //logout 
{ 
    if (System.Web.HttpContext.Current.User.Identity.IsAuthenticated) 
    { 
     System.Web.HttpContext.Current.Session.Abandon(); // it isn't logout >_< 
    } 
} 

jak się wylogować? : Pjak wylogować się z członkostwa w ASP

Odpowiedz

10

Jeśli używasz standardowych dostawców członkostwa i uwierzytelnianie formach:

FormsAuthentication.SignOut(); 
HttpContext.Current.Session.Abandon(); 

Zazwyczaj działa wspaniale.

Należy pamiętać, że jeśli użytkownik naciśnie ponownie w przeglądarce, prawdopodobnie zobaczy wersję z pamięci podręcznej (zalogowaną).

Edycja w odpowiedzi na komentarz

Byłem pod wrażeniem, że FormsAuthentication.Signout:

Usuwa bilet formy uwierzytelniania z poziomu przeglądarki.

I to jak bilet uwierzytelnienia jest całkowicie odrębnym i niezwiązane z sesji tokena, jeśli chcesz całkowicie wyczyścić wszystkie wiedzy użytkownika z serwera w tym momencie, nazywając Session.Abandon to dobra rzecz. Zdaję sobie sprawę, że nowa sesja zostanie dla nich utworzona na następnej stronie - chciałbym zobaczyć dokumentację przeciwną.

+0

Session.Abandon nie powinien być używany podczas wylogowywania użytkownika. FormsAuthentication.SignOut() powinien wykonać całe zadanie SignOut. –

+0

Zauważyłem, że jeśli nie włączasz wywołania Session.Abandon(), dostawca roli ściąga role dla zalogowanego wcześniej użytkownika, gdy następnym razem ktoś się zaloguje. To nie jest dobre. –

+0

@Shea Daniels: "Kiedy następnym razem ktoś się zaloguje" z tej samej maszyny? Ciekawy, ponieważ dostawca ról powinien pracować z aktualnie zalogowanym użytkownikiem, a token uwierzytelniania - w jaki sposób dzwonisz do dostawcy roli? –

2
FormsAuthentication.SignOut(); 
FormsAuthentication.RedirectToLoginPage(); 

To powinno wylogować użytkownika i zabrać go na stronę logowania.

Powiązane problemy