c# .net asp.net session page-lifecycle

C#Sesión clara



.net asp.net (3)

Encontré este artículo en la red, muy relevante para este tema. Publicando aquí.

ASP.NET Internals - Borrar variables de sesión de ASP.NET

Pregunta 1

Quiero saber cuándo se supone que debo usar:

Session.Abandon() // Cuando uso esto durante el seguimiento y después de llamarlo, me parece que la sesión todavía tiene un valor.

Y cuando se supone que debo usar:

Session.Clear()

¿Cuándo debería usar cada método específico?

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

Compruebo 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?

Debería usar algo como esto:

private void initSession() { Session.Clear(); Session.Abandon(); Response.Redirect("LoginPage.aspx"); }


La otra gran diferencia es que Abandon no elimina los elementos de forma inmediata, pero cuando lo hace, realiza un ciclo sobre los elementos de la sesión para verificar los objetos STA COM que necesita manejar especialmente. Y esto puede ser un problema.

Con mucha 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í.


En ASP.NET, ¿cuándo debería usar Session.Clear () en lugar de Session.Abandon ()?

Session.Abandon () destruye la sesión y se desencadena el evento Session_OnEnd.

Session.Clear () simplemente elimina todos los valores (contenido) del objeto. La sesión con la misma clave todavía está viva.

Por lo tanto, si usa Session.Abandon (), perderá esa sesión específica y el usuario obtendrá una nueva clave de sesión. Puede usarlo, por ejemplo, cuando el usuario cierra la sesión.

Use Session.Clear (), si desea que el usuario permanezca en la misma sesión (si no desea que vuelva a iniciar sesión, por ejemplo) y restablezca todos los datos específicos de su sesión.

¿Cuál es la diferencia entre Session.Abandon () y Session.Clear ()

Borrar: elimina todas las claves y valores de la colección de estado de sesión.

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

Session.Clear puede compararse con la eliminación de todos los libros del estante, mientras que Session.Abandon es más parecido a tirar todo el estante.

...

Generalmente, en la mayoría de los casos, necesita usar Session.Clear. Puede usar Session.Abandon si está seguro de que el usuario abandonará su sitio.

Así que de vuelta a las diferencias:

  • Abandon aumenta la solicitud Session_End.
  • Borrar elimina los elementos inmediatamente, Abandon no.
  • Abandon libera el objeto SessionState y sus elementos para que pueda recoger la basura.
  • Clear mantiene SessionState y los recursos asociados con él.

Session.Clear () o Session.Abandon ()?

Utiliza Session.Clear () cuando no desea finalizar la sesión, sino que simplemente borra todas las claves de la sesión y reinicia la sesión.

Session.Clear () no provocará la ejecución del controlador de evento Session_End en su archivo Global.asax.

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

Session.Clear () es como quitar libros de la estantería

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

Pregunta

Verifico algunas sesiones si no es igual a cero 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?

Responder

Si desea que el usuario vuelva a iniciar sesión, use Session.Abandon.