2010-10-14 27 views
40

¿Hay una diferencia entre Session.Clear() y Session.RemoveAll()?Session.Clear() vs. Session.RemoveAll()

Las páginas de descripciones y documentación parecen decir exactamente lo mismo, pero Supongo que debe haber algún motivo para crear dos funciones, ¿verdad?

Respuesta

-1

Para estar a salvo, siempre puede llamar a todos ellos al igual que ....

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

VB.NET ejemplo, estoy seguro de que todo lo que tiene que hacer es colocar el; al final de cada uno de ellos. Esto me sirvió de algo, ya que tuve algunos problemas con mi sesión antes de que no se eliminaran.

+19

Nota: Borrar y Eliminar Todo simplemente elimina todas las entradas (el usuario mantiene el mismo SessionId); Abandon finaliza la sesión completa (el usuario obtiene una nueva SessionId). –

+15

La respuesta de Darin Dimitrov debería haber sido marcada como la respuesta, ya que realmente responde a lo que se le preguntó. Esto realmente no responde la pregunta, que pregunta la diferencia entre los dos métodos, y de hecho da una respuesta pobre ya que sugiere llamar a Borrar y Eliminar Todo cuando los dos son funcionalmente idénticos y, por lo tanto, redundantes. – mtazva

+2

Además, .Abandon() solo tiene efecto al final de la solicitud, por lo que llamar a Session.Abandon() y luego a Session.Add ("foo", bar) daría como resultado una sesión abandonada. No solo llame a todos los métodos todas las veces, ya que funciona la mayor parte del tiempo. – DaveD

115

Absolutamente lo mismo. RemoveAll llama internamente al Clear. De Reflector:

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

buena explicación ............ –

+3

Gran respuesta; muy definitivo Me pregunto por qué MS incluyó ambos métodos cuando uno solo llama al otro. De todos modos, esto respondió mi pregunta, y usaré Clear() ahora porque es más fácil de escribir y más directo. – Jim

Cuestiones relacionadas