2010-08-23 17 views
27

Estoy utilizando unas pocas sesiones que deberían finalizar cuando el usuario termine. Me encontré con estos 3 asesinos de sesión. ¿Cuándo es el mejor momento para usar estos ya que uso sesiones más tiempo que no? Además, ¿hay alguna otra terminación de sesión de la que no tenga conocimiento?Optimización de MVC para Session.Clear(), Session.Abandon(), Session.RemoveAll()?

+0

posible duplicado de [En ASP.NET, ¿cuándo debería usar Session.Clear() en lugar de Session.Abandon()?] (Http://stackoverflow.com/questions/347377/in-asp-net -when-should-i-use-session-clear-rather-session-abandon) – jfar

+0

Como duplicado ... ¿debería eliminar esta pregunta? – MrM

Respuesta

51

Session.ClearSession.RemoveAll y son idénticos; el último solo llama al primero. Inmediatamente eliminan todos los elementos almacenados en la sesión, pero la sesión misma sobrevive. Session_OnEnd no se activa.

Session.Abandon en realidad no borra los valores inmediatamente, simplemente marca la sesión que se abandonará al final de la solicitud actual. Puede seguir leyendo los valores para el resto de la solicitud. Si escribe en la sesión más adelante en la solicitud, el nuevo valor se descartará silenciosamente al final de la solicitud sin previo aviso. Session_OnEnd se dispara al final de la solicitud, no cuando se llama a Abandonar.

+6

USTED SIR .. ME SALVÓ DE MATARME A MÍ MISMO. Pensé que era 'genial' llamar a 'Session.Abandon()' al comienzo de mi 'Login' y luego ingresar los datos, si el inicio de sesión se realiza correctamente. Gracias por esto. Puedo dormir ahora – Madushan

1

poco tarde aquí, pero le gustaría compartir la prueba de que es correcta @stevemegson como Session.RemoveAll llama internamente Session.Clear

public void Clear() 
     { 
      this._container.Clear(); 
     } 
     public void RemoveAll() 
     { 
      this.Clear(); 
     } 

Y lo que no es exactamente ninguna diferencia entre en todos los

Y session.Abandon llamadas

public void Abandon() 
     { 
      this._container.Abandon(); 
     } 

que básicamente lo hacen :) ..

public void Abandon() 
{ 
    this._abandon = true; 
}