2010-03-03 21 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 >_< 
    } 
} 

come uscire? : Pcome disconnettersi in abbonamento ASP

risposta

10

Se stai usando i provider di appartenenze standard e autenticazione basata su form:

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

di solito funziona a meraviglia.

Tenere presente che se l'utente preme di nuovo nel proprio browser, probabilmente vedrà la versione memorizzata nella cache.

Modifica per rispondere alle osservazioni

ho avuto l'impressione che FormsAuthentication.Signout:

Rimuove il ticket forme-di autenticazione dal browser.

E che, come il ticket di autenticazione è completamente separata dal, e senza rapporto con il token di sessione, se si vuole cancellare completamente tutte le conoscenze degli utenti dal server a quel punto, chiamando Session.Abandon è una buona cosa da fare Sono consapevole che una nuova sessione verrà creata per loro nella richiesta della pagina successiva - Sarei interessato a vedere la documentazione in contrario.

+0

Sessione.Abandon non deve essere utilizzato durante la disconnessione di un utente. FormsAuthentication.SignOut() dovrebbe eseguire tutto il lavoro di SignOut. –

+0

Ho scoperto che se non si include la chiamata Session.Abandon(), il provider di ruoli estrae i ruoli per l'utente che ha eseguito l'accesso la volta successiva che accede qualcuno. Ciò non va bene. –

+0

@Shea Daniels: "La prossima volta che qualcuno effettua l'accesso" dalla stessa macchina? Curioso, perché il fornitore di ruoli dovrebbe funzionare con l'utente attualmente connesso e il token di autenticazione: come stai chiamando il tuo fornitore di ruolo? –

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

Questo dovrebbe disconnettere l'utente e portarlo alla pagina di accesso.

Problemi correlati