2011-07-10 14 views
47

Pregunta # 1C# Borrar sesión

Quiero saber cuando se supone que voy a utilizar:

Session.Abandon() // Cuando uso este trazado durante y después de llamar IT puedo encontrar la sesión todavía tiene un valor.

Y cuando se supone que voy a utilizar:

Session.Clear()

Cuando debo utilizar cada método específico?


  • En general?
  • ¿En mi caso específico?

Comprobo si la sesión no es igual a cero en la carga de página. Si la sesión es igual a nula, quiero borrar la sesión y redireccionar a la página de inicio de sesión?

¿Debo usar algo como esto:

private void initSession() 
{ 
    Session.Clear(); 
    Session.Abandon(); 
    Response.Redirect("LoginPage.aspx"); 
} 
+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) –

Respuesta

86

In ASP.NET, when should I use Session.Clear() rather than Session.Abandon()?

Session.Abandon() destruye la sesión y el evento es Session_OnEnd disparada.

Session.Clear() simplemente elimina todos los valores (contenido) del Objeto. La sesión con la misma clave sigue siendo activa.

Por lo tanto, si usa Session.Abandon(), pierde esa sesión específica y el usuario obtendrá una nueva clave de sesión. Usted podría usarlo, por ejemplo, cuando el usuario cierre sesión.

Uso Session.clear(), si desea que el usuario restante en la misma sesión (si no quiere que él para relogin ejemplo) y reiniciar todas sus sesiones datos específicos.

What is the difference between Session.Abandon() and Session.Clear()

Borrar - Elimina todas las claves y valores de la colección de estados de sesión.

Abandono: elimina todos los objetos almacenados en una sesión. Si no hace llame al método Abandon explícitamente, el servidor elimina estos objetos y destruye la sesión cuando la sesión expira. También plantea eventos como Session_End.

Session.clear se puede comparar con la eliminación de todos los libros de la estantería, mientras Session.Abandon es más como tirar toda la plataforma.

...

En general, en la mayoría de los casos, es necesario el uso Session.clear. Puede usar Session.Abandon si está seguro de que el usuario abandonará su sitio.

Así que de vuelta a las diferencias:

  • Abandonar plantea petición Session_End.
  • Borrar elimina elementos inmediatamente, Abandon no lo hace.
  • Abandon libera el objeto SessionState y sus elementos para que pueda recoger .
  • Borrar mantiene SessionState y los recursos asociados con él.

Session.Clear() or Session.Abandon() ?

Se utilizan Session.clear() cuando no desea terminar la sesión, pero en lugar simplemente claras todas las claves de la sesión y reinicie la sesión.

Session.Clear() no hará que el controlador de eventos Session_End en su archivo Global.asax se ejecute.

Pero, por otro lado Session.Abandon() eliminará la sesión por completo y se ejecutará eventhandler Session_End.

Session.clear() es como la eliminación de los libros de la estantería

Session.Abandon() es como tirar la estantería sí.

Pregunta

reviso algunas sesiones si no igual nulo en la carga de la página. si uno de ellos es nulo, quiero borrar todas las sesiones y redireccionar a la página de inicio de sesión?

respuesta

Si desea que el usuario vuelva a conectarse, utilice Session.Abandon.

+0

pero después de llamar a 'Session.Abandon()', encuentro que la sesión aún mantiene su valor ?! –

+1

Muchas gracias. gran respuesta. –

+0

¡Muy buena publicación! Es bueno ver algo de buena información sobre esto. – Peter

3

La otra gran diferencia es Abandonar no elimina artículos inmediatamente, pero cuando lo hace, entonces la limpieza se hace un bucle sobre artículos de sesión para comprobar si hay objetos COM STA que necesita para manejar de forma especial.Y esto puede ser un problema.

En alta carga, es posible que dos (o más) solicitudes lleguen al servidor para la misma sesión (es decir, dos solicitudes con la misma cookie de sesión). Su ejecución se serializará, pero como Abandon no borra los elementos de forma sincrónica, sino que establece un indicador, es posible que se ejecuten ambas solicitudes, y ambas solicitudes para programar un elemento de trabajo para borrar la sesión "más tarde". Ambos elementos de trabajo pueden ejecutarse al mismo tiempo, y ambos están verificando los objetos de la sesión, y ambos están limpiando la matriz de objetos, y ¿qué sucede cuando tienes dos cosas iterando sobre una lista y cambiándola? ¡Auge! Y dado que esto sucede en una devolución de llamada queueuserworkitem y NO se realiza en un try/catch (gracias MS), reducirá todo el dominio de la aplicación. Estado allí.

Cuestiones relacionadas