Pregunta

Tanto Session.Clear () como Session.Abandon () eliminan las variables de sesión. Según tengo entendido, Abandon () finaliza la sesión actual y hace que se cree una nueva sesión, lo que provoca 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?

¿Fue útil?

Solución

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

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

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

Utilice 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.

Otros consejos

Solo usar Session.Clear () cuando un usuario cierra sesión puede plantear un agujero de seguridad. Como la sesión sigue siendo válida en lo que respecta al servidor web. Entonces es un asunto razonablemente trivial olfatear, tomar 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 IU de cierre de sesión sea parte de nueva sesión, la nueva sesión no tendría ninguno de los detalles de los usuarios y secuestrar 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 del mundo real es donde usarías Session.Abondon () , Session.Clear () .

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

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 esta forma, la cesta se borra sin cerrar la sesión del usuario.

Tuve este problema y probé ambos, pero tuve que conformarme con eliminar basura como "pageEditState", pero no eliminar 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);
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top