2010-10-14 7 views
40

Session.Clear() ve Session.RemoveAll() arasında bir fark var mı?Session.Clear() vs. Session.RemoveAll()

Açıklamalar ve dökümantasyon sayfaları tam olarak aynı şeyi gösteriyor gibi görünüyor, ancak İki işlev oluşturmanın bir nedeni olmalı diye farz ediyorum, haklı mıyım?

cevap

-1

.... olmak

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

VB.NET örneği, sana yapmanız gereken yerleştirmek eminim; her birinin sonunda. Bu, benim oturumumda, kaldırılmadan önce bazı sorunlar yaşadığım için benim için hile yaptı.

+19

Not: Clear ve RemoveAll tüm girdileri kaldırır (kullanıcı aynı SessionId değerini tutar); Vazgeç, tüm oturumu sonlandırır (kullanıcı yeni bir SessionId alır). –

+15

Darin Dimitrov'un cevabı, cevap olarak işaretlenmiş olmalıydı, çünkü gerçekten sorulan sorulara cevap veriyor. Bu aslında, iki yöntem arasındaki farkı sorar ve aslında ikisi de işlevsel olarak özdeş ve dolayısıyla gereksiz olduğunda Clear ve RemoveAll çağrısı önerdiği için zayıf bir yanıt verir. – mtazva

+2

Ayrıca, .Abandon() yalnızca isteğin sonunda yürürlüğe girer, böylece Session.Abandon() ve Session.Add ("foo", bar) çağrısı, terk edilmiş bir oturumla sonuçlanır. Her zaman her yöntemi çağırmayın çünkü çoğu zaman çalışır. – DaveD

115

Kesinlikle aynı. RemoveAll dahili olarak Clear numaralı telefonu arar. Reflektör Gönderen: Hep sadece bu yüzden gibi tüm bunları çağırabilir tasarrufu

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

güzel açıklama ............ –

+3

Harika cevap; çok kesin. Birisi diğerini çağırdığında MS'in her iki yöntemi de dahil etmesinin nedenini merak ediyorum. Her neyse, bu benim sorumu yanıtladı ve ben sadece Clear() şimdi kullanacağım çünkü yazması daha kolay ve daha düz bir şekilde. – Jim