tutorial pages net mvc asp application asp.net session asp.net-session

asp.net - pages - ¿Cuál es la diferencia entre Session.Abandon() y Session.Clear()



asp.net mvc 6 (10)

¿Cuál es la diferencia entre destruir una sesión y eliminar sus valores? ¿Puedes dar un ejemplo demostrando esto?

Busqué esta pregunta, pero no capto la respuesta total. Algunas respuestas son:

  • Session.Abandon() destruye la sesión
  • Session.Clear() simplemente elimina todos los valores

Un amigo me dijo esto:

Al borrar la sesión no se desarmará la sesión, todavía existe con la misma ID para el usuario pero con los valores simplemente borrados.

Abandon destruirá la sesión por completo, lo que significa que debe comenzar una nueva sesión antes de poder almacenar más valores en la sesión para ese usuario.

El siguiente código funciona y no arroja ninguna excepción.

Session.Abandon(); Session["tempKey1"] = "tempValue1";

Cuando abandona () una sesión, usted (o más bien el usuario) obtendrá un nuevo SessionId

Cuando pruebo Session, no realiza ningún cambio cuando Abandono la sesión.

Solo encuentro una diferencia: session.Abandon() provoca el evento Session_End


este código funciona y no lanza ninguna excepción:

Session.Abandon(); Session["tempKey1"] = "tempValue1";

Esto se debe a que cuando se llama al método Abandonar, el objeto de sesión actual se pone en cola para su eliminación, pero en realidad no se elimina hasta que se hayan procesado todos los comandos del script en la página actual. Esto significa que puede acceder a las variables almacenadas en el objeto Session en la misma página que la llamada al método Abandonar, pero no a las páginas web subsiguientes.

Por ejemplo, en el siguiente script, la tercera línea imprime el valor Mary. Esto se debe a que el objeto Session no se destruye hasta que el servidor ha terminado de procesar el script.

<% Session.Abandon Session("MyName") = "Mary" Reponse.Write(Session("MyName")) %>

Si accede a la variable MyName en una página web posterior, está vacía. Esto se debe a que MyName se destruyó con el objeto Session anterior cuando la página que contiene el ejemplo anterior finalizó el procesamiento.

de MSDN Session.Abandon


Al borrar una sesión, se eliminan los valores almacenados allí, pero aún puede agregar nuevos allí. Después de destruir la sesión, no puede agregar nuevos valores allí.


Creo que sería útil usar Session.Clear() lugar de usar Session.Abandon() .

Porque los valores todavía existen en sesión después de llamar más tarde pero se eliminan después de llamar al primero.


Cuando Abandon() una sesión, usted (o más bien el usuario) recibirá un nuevo SessionId (en la siguiente solicitud). Cuando Clear() una sesión, todos los valores almacenados se eliminan, pero SessionId permanece intacto.


Esto está cubierto por las diversas respuestas anteriores, pero la primera vez que leí este artículo me perdí un hecho importante, lo que condujo a un error menor en mi código ...

Session.Clear() BORRARÁ los valores de todas las teclas pero NO provocará que el evento final de sesión se dispare.

Session.Abandon() NO borrará los valores en la solicitud actual. Si se solicita otra página, los valores habrán desaparecido para esa. Sin embargo, abandonará lanzará el evento.

Entonces, en mi caso (¿y quizás en el tuyo?), Necesitaba Clear() seguido de Abandon() .



clear-its quitar clave o valores de la colección de estado de sesión.

abandon-its eliminar o eliminar objetos de sesión de la sesión ...


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

Abandon : 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 .

Tu dices:

Cuando pruebo Session, no realiza ningún cambio cuando Abandono la sesión.

Esto es correcto mientras lo hace dentro de una sola solicitud .
En la siguiente solicitud, la sesión será diferente. Pero la identificación de la sesión puede reutilizarse para que la identificación permanezca igual.

Si usará Session.Clear, tendrá la misma sesión en muchas solicitudes.

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:

  1. Abandon aumenta la solicitud Session_End.
  2. Borrar elimina ítems inmediatamente, Abandon no.
  3. Abandon libera el objeto SessionState y sus elementos para que pueda eliminar la basura recolectada y liberar los recursos. Clear mantiene SessionState y los recursos asociados con él.

Session.Abandon()

destruirá / matará a toda la sesión.

Session.Clear()

elimina / borra los datos de la sesión (es decir, las claves y los valores de la sesión actual) pero la sesión estará activa.

Compare con el método Session.Abandon (), Session.Clear () no crea la nueva sesión, solo hace que todas las variables en la sesión sean NULL.

La ID de sesión permanecerá igual en ambos casos, siempre que el navegador no esté cerrado.

Session.RemoveAll()

Elimina todas las claves y valores de la colección de estado de sesión.

Session.Remove()

Elimina un elemento de la colección de estado de sesión.

Session.RemoveAt()

Elimina un elemento en un índice especificado de la colección de estado de sesión.

Session.TimeOut()

Esta propiedad especifica el período de tiempo de espera asignado al objeto Session para la aplicación. (el tiempo se especificará en minutos).

Si el usuario no actualiza o solicita una página dentro del período de tiempo de espera, entonces la sesión finaliza.


this code works and dont throw any exception: Session.Abandon(); Session["tempKey1"] = "tempValue1";

Una cosa a tener en cuenta aquí es que Session.Clear elimina elementos inmediatamente, pero Session.Abandon marca la sesión que se abandonará al final de la solicitud actual. Eso simplemente significa que supongamos que intentó acceder al valor en el código justo después de que se ejecutó el comando session.abandon, aún estará allí. Así que no se confunda si su código simplemente no funciona incluso después de emitir el comando session.abandon e inmediatamente haciendo algo de lógica con la sesión.