HttpSession
es básicamente un mapa de la clave de cadena a un valor arbitrario. Cada vez que crea una sesión (accediendo a JSP o llamando al getSession()
/getSession(true)
), el contenedor generará una ID de sesión de cadena única y mantendrá una referencia a ese objeto HttpSession
. De nuevo, usará un mapa de la ID de sesión al objeto HttpSession
.
Una vez que coloca algo en la sesión, el contenedor contiene una referencia a esa sesión y la sesión hace referencia a su objeto. Permanecerá allí por un tiempo. Hay tres situación en la que su artículo será retirado de la sesión:
Cuando se quita de forma explícita (o removeAttribute()
setAttribute(null)
)
Cuando invalidate()
toda la sesión. Esto básicamente elimina todos los atributos y elimina toda la sesión del mapa de sesión administrado por contenedor
Cuando la sesión expira (el mismo comportamiento que con 2.) Esto sucede cuando ningún servlet/JSP accede a la sesión en una cantidad de tiempo configurable (ej. 10 minutos)
en el momento en que un objeto se retira de la sesión (cualquiera de los puntos anteriores) y ningún otro código contiene una referencia a ese objeto, es elegible para la recolección de basura y se eliminará durante el siguiente proceso de GC .
Puede agregar un objeto que implementa HttpSessionBindingListener a una HttpSession observar algunos de los comportamientos descritos anteriormente. Un objeto que implementa esta interfaz podría, por ejemplo, imprimir un mensaje de registro cuando se libere de la sesión.
Puede consultar el documentation here.