In ASP.NET quando devo usare la Sessione.Clear() piuttosto che di Sessione.Abbandonare()?

Sia Di Sessione.Clear() e di Sessione.Abbandonare() sbarazzarsi di variabili di sessione. Da quanto ho capito, Abbandonare() termina la sessione corrente, e provoca una nuova sessione per essere creato causando la Fine e l’Inizio degli eventi di incendio.

Sembra preferibile chiamare Abbandonare() nella maggior parte dei casi, come ad esempio la registrazione di un utente. Ci sono scenari in cui mi piacerebbe usare il Clear() invece? C’è molto di una differenza di prestazioni?

InformationsquelleAutor Lance Fisher | 2008-12-07



5 Replies
  1. 165

    Session.Abandon() distrugge la sessione e il evento Session_OnEnd è attivato.

    Session.Clear() solo rimuove tutti i valori (contenuto) dall’Oggetto. La sessione con la stessa chiave è ancora vivo.

    Quindi, se si utilizza Session.Abandon(), si perde la sessione in corso e l’utente riceverà una nuova chiave di sessione. Si potrebbe utilizzare, per esempio, quando l’utente si disconnette.

    Utilizzare Session.Clear(), se si desidera che l’utente rimane nella stessa sessione (se non si desidera che l’utente a ripetere il login per esempio) e reimpostare tutti i sessione dati specifici.

    • Credo meglio usare RemoveAll() invece di Clear(), come “Darin Dimitrov” ha suggerito qui stackoverflow.com/a/3931344/713246
    • Come ha fatto a suggerire che RemoveAll() era meglio Clear()? Tutto quello che ho visto nella sua risposta è stata che RemoveAll() chiama Clear(), e sembra essere funzionalmente identici.
    • Appena usato Session.Abandon() come un ‘logout’ interna app che utilizza l’Autenticazione di Windows – gli utenti non hanno ri-autenticazione (Chrome, FF), ma la sessione smaltiti e uno nuovo rilasciato, che ha soddisfatto le mie esigenze
  2. 13

    Solo utilizzando Sessione.Clear() quando un utente si disconnette, possono rappresentare un buco di sicurezza. La sessione è ancora valido quanto il Server Web è in questione. Si tratta quindi di un ragionevolmente banale questione di annusare, e prendere l’Id di sessione, e dirottare la sessione.

    Per questo motivo, quando la registrazione di un utente sarebbe più sicuro e più sensato utilizzare Sessione.Abbandonare() in modo che la sessione viene distrutta, e una nuova sessione creata (anche se il logout pagina dell’interfaccia utente vorresti far parte di una nuova sessione, la nuova sessione non avrebbe eventuali dettagli in esso e dirottamento di una nuova sessione sarebbe equivalente ad avere una nuova sessione, pertanto, di essere muto).

    • Quale sarebbe il punto di dirottamento di una sessione vuota? Il dirottatore sarebbe ancora il log in, e il loro è dati accidentalmente fornire al nuovo utente.
  3. 5

    Io non sono ancora sicuro di quello che un esempio del mondo reale è dove si desidera utilizzare Session.Abondon(), Session.Clear().

    Riesco a capire…se l’utente fa clic sul tuo link per uscire e prendere per il tuo “sei stato disconnesso” di pagina….sessione del browser è ancora in corso ma si desidera rimuovere le informazioni memorizzate nella sessione. Se si, abbandonata la sessione si è poi una nuova sessione viene creata subito per il “sei stato disconnesso” pagina.

    • Session_End sarà chiamato e si può fare pulizia di roba. La nuova sessione non esiste fino ad autenticare comunque. Inoltre l’avvio di una nuova sessione, piuttosto che la metà di iniziare una nuova sessione.
    • meno 1: Questa non è una risposta, è un “anch’io”!
  4. 3

    Session.Abandon distrugge la sessione, come indicato sopra, così si dovrebbe utilizzare durante la registrazione di qualcuno. Penso che un buon uso di Session.Clear sarebbe per un carrello su un sito di ecommerce. In che modo il cesto viene eliminato senza registrazione utente.

    • Ma cosa succede se uso Session.Abandon solo cancellare una specifica carrello?
  5. 0

    Ho avuto questo problema e provato entrambi, ma si è dovuto accontentare per la rimozione di merda come “pageEditState”, ma non rimuovere info utente per timore che devo guardare di nuovo.

    public static void RemoveEverythingButUserInfo()
    {
        foreach (String o in HttpContext.Current.Session.Keys)
        {
            if (o != "UserInfoIDontWantToAskForAgain")
                keys.Add(o);
        }
    }

Lascia un commento