2010-10-14 10 views
40

C'è una differenza tra Session.Clear() e Session.RemoveAll()?Session.Clear() vs. Session.RemoveAll()

Le pagine di descrizioni e documentazione sembrano dire esattamente la stessa cosa, ma presumo che ci sia qualche motivo per creare due funzioni, ho ragione?

risposta

-1

Per essere risparmio si può sempre e solo chiamarli tutti in questo modo ....

Session.Clear() 
Session.Abandon() 
Session.RemoveAll() 

VB.NET esempio, io sono sicuro che tutto quello che dovete fare è inserire il; alla fine di ognuno di essi. Questo ha fatto il trucco per me perché ho avuto alcuni problemi con la mia sessione prima di dove non sono stati rimossi.

+19

Nota: Cancella e RimuoviTutti basta rimuovere tutte le voci (l'utente mantiene lo stesso SessionId); Abandon termina l'intera sessione (l'utente riceve un nuovo SessionId). –

+15

La risposta di Darin Dimitrov avrebbe dovuto essere contrassegnata come risposta, dal momento che risponde veramente a ciò che è stato chiesto. Questo in realtà non risponde alla domanda, che chiede la differenza tra i due metodi, e in effetti dà una risposta scarsa in quanto suggerisce di chiamare Clear e RemoveAll quando i due sono funzionalmente identici e, quindi, ridondanti. – mtazva

+2

Inoltre, .Android() ha effetto solo alla fine della richiesta, quindi chiamare Session.Abandon() e quindi Session.Add ("foo", barra) risulterebbe in una sessione abbandonata. Non chiamare ogni metodo ogni volta perché funziona la maggior parte del tempo. – DaveD

115

Assolutamente lo stesso. RemoveAll chiamate Clear internamente. Da Riflettore:

public sealed class HttpSessionState : ICollection, IEnumerable 
{ 
    ... 

    [TargetedPatchingOptOut("Performance critical to inline this type of method across NGen image boundaries")] 
    public void RemoveAll() 
    { 
     this.Clear(); 
    } 

    ... 
} 
+1

bella spiegazione ............ –

+3

Ottima risposta; molto definitivo. Mi chiedo perché MS abbia incluso entrambi i metodi quando uno chiama semplicemente l'altro? Ad ogni modo, questo ha risposto alla mia domanda, e userò semplicemente Clear() ora perché è più facile da digitare e più diretto. – Jim