En ASP.NET, cuándo debo usar la Sesión.Clear () en lugar de Session.Abandon ()?


Ambas sesiones.Clear() y Session.Abandon () elimina las variables de sesión. Según lo entiendo, Abandon () termina la sesión actual, y hace que se cree una nueva sesión, causando que se activen los eventos End y Start.

Parece preferible llamar a Abandon() en la mayoría de los casos, como cerrar la sesión de un usuario. ¿Hay escenarios en los que usaría Clear() en su lugar? ¿Hay mucha diferencia de rendimiento?

Author: abatishchev, 2008-12-07

5 answers

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

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

Entonces, si usas Session.Abandon(), pierdes esa sesión específica y el usuario obtendrá una nueva clave de sesión. Podría usarlo, por ejemplo, cuando el usuario cierra sesión.

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

 162
Author: splattne,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-09-26 20:42:06

Solo usando Sesión.Clear () cuando un usuario cierra sesión puede suponer un agujero de seguridad. Como la sesión sigue siendo válida en lo que respecta al Servidor Web. Es entonces un asunto razonablemente trivial oler, y agarrar el Id de sesión, y secuestrar esa sesión.

Por esta razón, al cerrar la sesión de un usuario sería más seguro y más sensato usar Session.Abandon() para que la sesión se destruya, y se cree una nueva sesión (aunque la página de la interfaz de usuario de cierre de sesión sería parte de la nueva sesión, la nueva session no tendría ninguno de los detalles de los usuarios en ella y secuestrar la nueva sesión sería equivalente a tener una sesión nueva, por lo tanto sería mudo).

 12
Author: shabbirh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-11-23 04:45:31

Todavía no estoy seguro de qué es un ejemplo del mundo real donde usarías Session.Abondon(), Session.Clear().

Puedo entender...si el usuario hace clic en su enlace de cierre de sesión y lo lleva a su página "ha cerrado sesión"....su sesión de navegador aún continúa, pero desea eliminar la información almacenada en la sesión. Si abandonaste la sesión, se crearía una nueva sesión inmediatamente para la página "has cerrado sesión".

 5
Author: nick,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-05 05:18:54

Session.Abandon destruye la sesión como se indicó anteriormente, por lo que debe usar esto cuando cierre la sesión de alguien. Creo que un buen uso de Session.Clear sería para una cesta de la compra en un sitio web de comercio electrónico. De esa manera la cesta se borra sin cerrar la sesión del usuario.

 3
Author: Kasim Shafiq,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-05-15 17:12:23

Tuve este problema y probé ambos, pero tuve que conformarme con eliminar basura como "pageEditState", pero no eliminar la información del usuario para que no tenga que buscarla de nuevo.

public static void RemoveEverythingButUserInfo()
{
    foreach (String o in HttpContext.Current.Session.Keys)
    {
        if (o != "UserInfoIDontWantToAskForAgain")
            keys.Add(o);
    }
}
 0
Author: MatthewMartin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-12-07 14:34:08