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

Tanto Session.Clear () como Session.Abandon () eliminan las variables de sesión. Tal como lo entiendo, Abandon () finaliza la sesión actual y hace que se cree una nueva sesión, lo que provoca que los eventos End y Start se disparen.

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

    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 el usuario vuelva a iniciar sesión, por ejemplo) y restablezca todos los datos específicos de la sesión.

    Solo usar Session.Clear () cuando un usuario cierra sesión puede representar un agujero de seguridad. Como la sesión aún es válida en lo que respecta al servidor web. Entonces, es una cuestión bastante trivial olfatear, tomar el ID de la sesión y secuestrar esa sesión.

    Por esta razón, al iniciar sesión un usuario sería más seguro y más sensato usar Session.Abandon () para que se destruya la sesión y se cree una nueva sesión (aunque la página de UI de sesión de sesión sería parte de la nueva sesión, la nueva sesión no tendría ninguno de los detalles de los usuarios y el secuestro de la nueva sesión sería equivalente a tener una nueva sesión, por lo tanto, sería muda).

    Todavía no estoy seguro de qué ejemplo en el mundo real es donde usaría 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 “se ha desconectado” … su sesión de navegador aún continúa pero desea eliminar la información almacenada en la sesión. Si abandonó la sesión, se creará una nueva sesión de inmediato para la página “se ha cerrado la sesión”.

    Session.Abandon destruye la sesión como se indicó anteriormente, por lo que debe usar esto para desconectar a 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 esta forma, la canasta se borra sin cerrar la sesión del usuario.

    Tuve este problema e intenté ambos, pero tuve que conformarme con quitar basura como “pageEditState”, pero no eliminé la información del usuario para no tener que volver a buscarla.

     public static void RemoveEverythingButUserInfo() { foreach (String o in HttpContext.Current.Session.Keys) { if (o != "UserInfoIDontWantToAskForAgain") keys.Add(o); } }