2011-04-29 19 views
18

¿Los objetos se serializan y se envían al usuario y viceversa en cada conexión (almacenada en cookies)?¿Dónde se almacenan los atributos de Java HttpSession?

¿O están almacenados en el montón del servidor y la cookie es solo un identificador muy pequeño?

Cualquier información sobre este tema sería útil.

Gracias

+0

Relacionados: http://stackoverflow.com/questions/3106452/java-servlet-instantiation-and-session-variables/3106909#3106909 – BalusC

Respuesta

20

Lo tienes en la segunda suposición.

La cookie contiene un JSESSIONID. Esa identificación se usa para buscar la HttpSession del usuario en un mapa que el servidor mantiene. Al menos esta es la forma más común. Hay formas más intrincadas de que el servidor pueda implementar esto, pero llevar todo el estado atrás en una cookie no es uno de ellos.

Esto tiene algunas implicaciones. Primero, si el servidor se cae, pierde el estado de la sesión. En segundo lugar, si tiene un clúster de servidores, necesita que el usuario esté conectado al mismo servidor cada vez, o perderán su sesión entre solicitudes posteriores. Por último, el secuestro de sesión se convierte en una posibilidad si alguien encuentra la manera de copiar el JSESSIONID de otra persona y reemplazar el suyo.

+0

¿Hay alguna alternativa segura? –

+9

Su último párrafo no es del todo exacto. Los servidores web populares de Java (al menos Tomcat y JBoss) se pueden configurar para conservar el estado de la sesión en el disco, de modo que pueda conservarse durante un bloqueo o reinicio del servidor. Los mismos servidores también admiten el estado de sesión compartido entre todos los nodos de un clúster para que el usuario pueda acceder a cualquier nodo del clúster sin perder su sesión (y si un nodo del clúster falla, el usuario puede continuar su sesión con un nodo diferente como si nada hubiera pasado). – aroth

+3

@aroth - Estás en lo cierto. Mi segundo párrafo se refería a los temas de la forma más común en que se manejan las sesiones en Tomcat, especialmente cuando sale de la caja (por así decirlo). Aludí a los sistemas más intrincados disponibles, pero no pensé que esta pregunta requiriera una inmersión profunda en todas las complejidades de las sesiones persistentes/compartidas. Si nos fijamos en la pregunta original, todo lo que pedía era aclaraciones sobre cómo funcionaban las cookies para el estado de la sesión. Intencionalmente dejé fuera todas las diferentes posibilidades. – rfeak

5

La cookie solo contiene un identificador de sesión (normalmente llamado JSESSIONID). El servidor asigna este identificador a los datos almacenados actualmente en la sesión del usuario.

Los datos en sí se pueden almacenar en la memoria, o se pueden serializar a la base de datos o al archivo dependiendo del servidor que esté utilizando y su configuración.

Cuestiones relacionadas