2012-02-27 7 views
8

¿Cómo llama al isNew() en el objeto de sesión, verifica si la sesión es nueva o ya está en uso?¿Cómo dice isNew() si la sesión es nueva o ya está en uso?

He leído que isNew() devuelve verdadero si el cliente aún no ha respondido con la ID de la sesión. Pero, qué significa ? Explique

+0

¿A qué clase se refiere su pregunta? –

+0

@ Andrew Logvinov ver la edición –

+0

Lea esto para comprender cómo funcionan las sesiones: http://stackoverflow.com/questions/3106452/how-do-servlets-work-instantiation-session-variables-and-multithreading – BalusC

Respuesta

20

Leí que isNew() devuelve verdadero si el cliente aún no ha respondido con la ID de la sesión. Pero, qué significa ?

Tenga en cuenta que el servidor está actualmente procesando una solicitud. Hay dos escenarios con respecto al manejo de la sesión.

  • En el nuevo escenario de sesión, el servidor está creando una nueva sesión para el usuario/cliente. (El cliente puede no haber suministrado una identificación de sesión en la solicitud, o puede haber proporcionado una identificación de sesión que el servidor considera inválida). El código de la aplicación del servlet decide que se requiere una sesión (por ejemplo, porque tiene cierta información que desea almacenar allí), e intenta buscarlo con el indicador "crear si no está presente". La infraestructura de servlets se da cuenta de que no hay una sesión actual, crea una nueva con una nueva identificación de sesión y la guarda en el almacén de sesiones. Al completar la solicitud, la identificación de la sesión se devuelve al cliente; p.ej. como una cookie, o como una URL con una identificación de sesión adjunta.

  • En el escenario de sesión existente, el cliente ha incluido una identificación de sesión en la solicitud; p.ej. como una cookie de sesión o como una identificación de sesión en la URL de solicitud. La infraestructura del servlet reconoce esta identificación, la busca en su almacén de sesiones y (si es necesario) recrea el objeto HttpSession que contiene el estado de sesión recuperado del almacén de sesiones. Cuando el código de la aplicación del servlet intenta acceder a la sesión, obtiene este objeto HttpSession, no uno nuevo. El servlet puede usar y actualizar el estado de la sesión a medida que procesa la solicitud.

En el primer escenario, llamando isNew() en el objeto de sesión volverá true porque se trata de una nueva sesión.

En el segundo caso, llamando al isNew() en el objeto de sesión devolverá false porque esta NO es una sesión nueva.

¿Cómo hace call isNew() en el objeto de sesión, comprueba si la sesión es nueva o ya está en uso?

La infraestructura del servlet sabe cuál de los dos escenarios se produjo porque hizo la creación de la sesión o la búsqueda de la sesión. La implementación más obvia de isNew() es incluir un campo private boolean en el objeto HttpSession y devolver el valor de ese campo como resultado de isNew(). El campo sería inicializado por la infraestructura del servlet según cómo obtuvo el objeto de sesión.

+2

no tengo entendió una sola parte de tu respuesta. ¿Puedes por favor aclarar los puntos? –

+3

Entiendo completamente cada parte de su respuesta, gracias por escribirlo. – user1884155

Cuestiones relacionadas