2010-06-18 11 views
13

Me he enfrentado a esta pregunta en mi entrevista también. Tengo mucha confusión con Scope Scope & it management en java.¿Qué es la gestión de sesiones en Java?

En web.xml que tenemos la entrada:

<session-config> 
     <session-timeout> 
      30 
     </session-timeout> 
</session-config> 

¿Qué indica en realidad? ¿Es el alcance de un proyecto completo?

Otro punto que me confunde es ¿cómo podemos separar el alcance de la sesión de varias solicitudes en el mismo proyecto? Significa si estoy iniciando sesión desde una PC & al mismo tiempo que estoy iniciando sesión desde otra PC, ¿lo diferencia?

Además, otra cosa confusa es la diferencia del navegador. ¿Por qué es posible abrir los diferentes Gmail en diferentes navegadores? Y Gmail puede evitar que una sesión inicie sesión. ¿Cómo se mantiene con nuestra web personal?

Respuesta

25

Gestión de sesiones no es algo limitado a Java y servlets. Aquí es más o menos la forma en que ocurre:

  1. El protocolo HTTP no tiene estado, por lo que el servidor y el navegador debe tener una forma de almacenar la identidad del usuario a través de múltiples peticiones
  2. El navegadores envía la primera solicitud al servidor
  3. el servidor comprueba si el navegador se ha identificado con la cookie de sesión (véase más adelante)

    3.1. si el servidor no 'saber' el cliente:

    • el servidor crea un nuevo identificador único, y lo pone en un mapa (más o menos), como una clave, cuyo valor es la Sesión de nueva creación. También envía una respuesta de cookie que contiene el identificador único.

    • el navegador almacena la cookie de sesión (con el tiempo de vida = la duración de la instancia del navegador), que contiene el identificador único, y la utiliza para cada solicitud posterior para identificarse de manera única.

    3.2. Si el servidor ya sabe el cliente - servidor obtiene la sesión correspondiente al identificador único pasado que se encuentra en la cookie de sesión

Ahora en alguna de las preguntas que tenga:

  • el tiempo de espera de sesión se el tiempo de vida para cada entrada de mapa de sesión sin acceder. En otras palabras, si un cliente no envía una solicitud por 30 minutos (de su ejemplo), el mapa de sesión soltará esta entrada, e incluso si el cliente se identifica con la clave única en la cookie de sesión, no habrá datos presentes en el servidor.

  • diferentes gmail (y cualquier sitio) se pueden abrir en diferentes navegadores porque la cookie de sesión es por navegador. Es decir. cada navegador se identifica de manera única al no enviar el id. de sesión único o al enviar uno que el servidor ha generado para él.

  • registro desde diferentes PCs es la misma realidad - usted no comparte un identificador de sesión

  • el registro de salida es en realidad la eliminación de la entrada para el identificador de sesión en el servidor.

Nota: el identificador de sesión único, alternativamente, se puede almacenar:

0

Los servlets en Java tienen un objeto HttpSession que puede usar para almacenar información de estado para un usuario. La sesión se administra en el cliente mediante una cookie (JSESSIONID) o puede hacerse utilizando reescrituras de URL. El tiempo de espera de la sesión describe cuánto tiempo esperará el servidor después de la última solicitud antes de eliminar la información de estado almacenada en una HttpSession.

El alcance es por instancia de navegador, por lo que en el ejemplo que da inicio de sesión desde dos PC diferentes resultará en dos objetos de sesión.

2

¿Qué significa en realidad?

Duración de una sesión. La sesión caduca si no hay ninguna transacción entre el cliente y el servidor durante 30 minutos (por segmento de código)

¿Es el alcance de todo el proyecto?

Tiene alcance de aplicación. Define para cada aplicación web

Otro punto me confunde es cómo podemos que separar el ámbito de sesión de solicitud múltiple en el mismo proyecto? Significa si estoy iniciando sesión desde una PC & al mismo tiempo que estoy iniciando sesión en otra PC, ¿lo diferencia?

Sí. Los identificadores de sesión (JSESSIONID para Apache Tomcat) serán diferentes.

Además, otra cosa confusa es la diferencia del navegador . ¿Por qué es posible abrir diferentes Gmail en diferentes navegadores?

Cada sesión del mismo usuario desde un navegador diferente es una sesión diferente. Y las cookies establecidas en un navegador no afectarán en otro. Así que diferentes instancias de Gmail son posibles en diferentes navegadores.

Y Gmail puede evitar una sesión de Inicie sesión para cerrar sesión. ¿Cómo se mantiene con nuestra web personal?

Persistent cookies

0

si abre la misma aplicación en una ventana diferente me refiero a una instancia múltiple de un navegador i Creará una sesión diferente para cada instancia.

0

Recomiendo Apache Shiro para la gestión de sesiones, la autenticación y la autorización.

lo retiro.

Como @BalusC commeneted a continuación, sólo el contenedor de servlets es el encargado de gestionar la sesión HTTP. Shiro solo está usando eso. Se enganchará a HttpSession a través de un filtro que usted define explícitamente.

+0

Shiro no tiene nada que ver con la gestión de sesiones HTTP. Tiene algo que ver con la autenticación y la autorización que, en el caso de las aplicaciones web "ocultas", de hecho utilizan, entre otras cosas, la sesión HTTP. Pero ** definitivamente no ** se responsabiliza de la "gestión de la sesión". El servletcontainer es el responsable de eso. Shiro solo lo está usando. – BalusC

0

tenemos 4 formas de gestionar una sesión.

1.Cookies 2.URL reescribir 3.Hidden campos de formulario sesión 4.HTTP

el cuarto es de gran alcance y en su mayoría utiliza hoy en día.

Cuestiones relacionadas