2010-10-14 5 views
40

Gibt es einen Unterschied zwischen Session.Clear() und Session.RemoveAll()?Session.Clear() vs. Session.RemoveAll()

Die Beschreibungen und Dokumentation Seiten scheinen genau das gleiche zu sagen, aber Ich gehe davon aus, dass es einen Grund für die Schaffung von zwei Funktionen geben muss, habe ich Recht?

Antwort

-1

Um speichern Sie sie immer nur rufen alle wie so können ....

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

VB.NET Beispiel, ich bin sicher, dass alles, was Sie tun müssen, das ist zu platzieren; am Ende von jedem von ihnen. Das hat den Trick für mich gemacht, da ich einige Probleme mit meiner Session hatte, bevor sie nicht entfernt wurden.

+19

Hinweis: Löschen und EntfernenAlle entfernen Sie alle Einträge (der Benutzer behält die gleiche SessionId); Abbruch beendet die gesamte Sitzung (der Benutzer erhält eine neue SessionId). –

+15

Darin Dimitrovs Antwort hätte als Antwort markiert werden sollen, da sie wirklich das anspricht, was gefragt wurde. Dies beantwortet nicht die Frage, die den Unterschied zwischen den beiden Methoden erfordert, und tatsächlich eine schlechte Antwort gibt, da es vorschlägt, Clear und RemoveAll aufzurufen, wenn die beiden funktional identisch und somit redundant sind. – mtazva

+2

Außerdem wird .Abandon() nur am Ende der Anforderung wirksam, sodass das Aufrufen von Session.Abandon() und dann von Session.Add ("foo", bar) zu einer abgebrochenen Sitzung führen würde. Rufen Sie nicht jedes Mal jedes Verfahren auf, weil es die meiste Zeit funktioniert. – DaveD

115

Absolut gleich. RemoveAll ruft intern Clear auf. Von Reflektor:

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

nette Erklärung ............ –

+3

Große Antwort; sehr definitiv. Ich frage mich, warum MS beide Methoden einschloss, wenn man den anderen gerade anruft? Wie auch immer, dies beantwortete meine Frage, und ich werde jetzt Clear() verwenden, weil es einfacher zu tippen und direkter ist. – Jim