Pregunta

¿Cuál es la diferencia entre la destrucción de una sesión y la eliminación de sus valores? ¿Puede por favor dar un ejemplo que demuestra esto?

He buscado para esta pregunta, pero no capto respuesta total. Algunas respuestas son:

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

Un amigo me dijo esto:

  

Borrado de la sesión no se desarmará   la sesión, todavía existe con el   mismo ID para el usuario pero con la   Los valores simplemente borran.

     

Abandonar destruirá la sesión   por completo, lo que significa que usted necesita   comenzar una nueva sesión antes de que pueda   almacenar cualquier valor más en la sesión   para ese usuario.

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

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

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

Cuando la prueba de sesiones, no se hace ningún cambio cuando abandonan la sesión.

acabo de encontrar una diferencia: session.Abandon() plantea evento Session_End

¿Fue útil?

Solución

Claro - Elimina todos claves y valores de la colección de estados de sesión.

Abandonar - Elimina todos los objetos almacenados en una sesión. Si no llama al método Abandon de forma explícita, el servidor elimina estos objetos y destruye la sesión cuando los tiempos de espera de la sesión.
También plantea eventos como Session_End .

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

Usted dice:

  

Cuando la prueba de sesiones, no se hace ningún cambio cuando abandonan la sesión.

Esto es correcto, mientras que usted lo está haciendo dentro de una única solicitud .
En la siguiente petición de la sesión será diferente. Pero el identificador de sesión rel="noreferrer"> para que el ID seguirá siendo el mismo.

Si va a utilizar Session.clear tendrá la misma sesión en muchas peticiones.

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

Así que de vuelta a las diferencias:

  1. Abandonar solicitud aumentos Session_End.
  2. Borrar elimina los elementos Inmediatamente, Abandonar no.
  3. Abandonar libera el objeto SessionState y sus artículos para que pueda basura ba recogido para liberar los recursos. Claro mantiene SessionState y los recursos asociados a ella.

Otros consejos

Cuando Abandon() una sesión, usted (o más bien el usuario) recibirá una nueva SessionId (en la siguiente petición). Cuando Clear() una sesión, todos los valores almacenados son eliminados, pero el SessionId se mantiene intacta.

Este es tipo de la cubierta por las diferentes respuestas anteriores, pero la primera vez que leí este artículo se perdió un hecho importante, lo que condujo a un error menor en mi código ...

Session.Clear() borrará los valores de todas las llaves, pero no causará el evento de fin de sesión al fuego.

Session.Abandon() no borrará los valores en la solicitud actual. Si se solicita otra página, los valores se han ido para que uno. Sin embargo, abandonar arrojará el evento.

Así que, en mi caso (y tal vez en la suya?), Que necesitaba Clear() seguido por Abandon().

Borrado de una sesión elimina los valores que estaban almacenados allí, pero todavía se pueden añadir otras nuevas allí. Después de la destrucción de la sesión no se puede agregar nuevos valores allí.

clara su clave o quitar valores de la colección de estado de sesión ..

abandonar sus-quitar o eliminados objetos de sesión de la sesión ..

Session.Abandon() 

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

Session.Clear()

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

Comparar con el método Session.Abandon (), Session.clear () no crea la nueva sesión, que acaba de hacer todas las variables en la sesión a NULL.

ID de sesión se mantendrá igual en los dos casos, siempre y cuando el navegador no está cerrado.

Session.RemoveAll()

Se elimina todas las claves y los valores de la colección de estados de sesión.

Session.Remove()

Se elimina un elemento de la colección de estados de sesión.

Session.RemoveAt()

Se elimina un elemento situado en un índice especificado de la colección de estados de sesión.

Session.TimeOut()

Esta propiedad especifica el tiempo de espera asignado al objeto de sesión para la aplicación. (El tiempo será especificado en minutos).

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

Existencia de sessionid puede provocar el ataque de fijación de sesión que es uno de los puntos en el cumplimiento de PCI. Para quitar el sessionid y superar el ataque de fijación de sesión, lea esta solución - ¿Cómo evitar la vulnerabilidad de fijación de sesión en ASP.NET? .

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

Debido a que los valores siguen existiendo en la sesión después de llamar más tarde, pero se eliminan después de llamar a la primera.

this code works and dont throw any exception:

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

Hay que destacar aquí que Session.clear eliminar elementos de inmediato, pero Session.Abandon marca la sesión que ser abandonado al final de la solicitud actual. Eso simplemente significa que suponga que ha intentado acceder valor en el código justo después fue ejecutado el comando Session.Abandon, será todavía allí. Así que no se confunda si el código no está funcionando incluso después de emitir comandos Session.Abandon e inmediatamente hacer un poco de lógica con la sesión.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top