2009-11-16 12 views
24

Dado que HTTP es un protocolo sin estado, cuando un cliente realiza una serie de solicitudes al servidor, ¿cómo identifica el servidor las solicitudes de un cliente particular durante un período de tiempo como t1, t2, t3 ..HTTP Session Tracking

Navegué por la web y encontré términos como ID de sesión, reescritura de URL y cookies. Pero sería genial si alguien lo explica de una mejor manera. Específicamente, ¿qué parte de la solicitud y respuesta HTTP se usará para el seguimiento de la sesión?

Respuesta

38

Como mencionaste, las formas más comunes de implementar el seguimiento de sesión HTTP incluyen la reescritura de URL y las cookies. El seguimiento de sesión básicamente requiere que se mantenga una ID de sesión entre varias solicitudes al servidor. Esto significa que cada vez que un cliente determinado realiza una solicitud al servidor, pasa la misma ID de sesión. El servidor puede usar esta ID para buscar la información de la sesión que mantiene.

Al usar cookies, el servidor le pide al cliente que almacene una cookie configurando el encabezado de respuesta HTTP Set-Cookie. Esta cookie contiene el identificador de sesión único asignado a ese cliente - en este ejemplo la cadena 'ABAD1D':

Set-Cookie: JSESSIONID=ABAD1D;path=/ 

La cookie se envía de vuelta al servidor por el cliente utilizando el encabezado de la solicitud Cookie HTTP en cada solicitud y por lo tanto, al servidor se le informa en cada solicitud la ID de sesión actualmente asignada al cliente.

Cookie: JSESSIONID=ABAD1D 

Al utilizar la reescritura de URL, esta misma ID de sesión se envía en algún lugar de la URL. Una vez más, el servidor extrae el identificador de sesión de la dirección URL para que pueda buscar la sesión para un cliente en particular:

http://my.app.com/index.jsp;JSESSIONID=ABAD1D 

Sin embargo, el servidor también debe asegurarse de que todas las URL de las páginas web envían de vuelta al cliente también se reescriben para contener la ID de sesión de ese cliente en particular. Como el ID de sesión está codificado en las URL, este método de seguimiento de sesión es transparente para el navegador. A menudo, un servidor recurrirá a la reescritura de URL si descubre que no puede establecer una cookie de sesión en el cliente, lo que implica que el cliente no admite/permite cookies.

Tenga en cuenta que las sesiones pueden caducar. Esto significa que si el servidor no 've' una ID de sesión determinada durante un período de tiempo, puede eliminar los datos de la sesión para conservar los recursos.

+0

Gracias por la información .. :) – dexter

+2

@RickNZ no pierda la fe en SO - No he copiado su respuesta. Si revisas mis revisiones, verás que comencé explicando las sesiones HTTP. Luego pasé un tiempo verificando formatos de ejemplo de JSESSIONID tanto en las cookies como en las URL, y confirmando los nombres de los encabezados HTTP. Luego agregué estos a mi publicación cuando estaba seguro de que eran correctos. No es de extrañar que preguntas como esta arrojen respuestas similares, pero si aún se siente ofendido, con mucho gusto votaré para eliminar mi respuesta. – teabot

+1

@teabot: sin preocupaciones; está todo bien. – RickNZ

2

El seguimiento de sesión es algo del lado del servidor.

Un servidor web emite un identificador de sesión que se devuelve al navegador. El navegador envía este identificador de sesión junto con cada solicitud.

Esto probablemente se hace usando cookies de forma transparente para el usuario.

1

En la mayoría de los casos, el manejo de la sesión se realiza enviando un cookie al cliente. esa cookie se enviará de vuelta al servidor en cada solicitud de ese cliente en particular.

El session id se asociará con algunos recursos en el lado del servidor (archivo, espacio de ram) para que el servidor al leer el session id en la cookie pueda encontrar este recurso y saber qué cliente era.

9

Específicamente qué parte del HTTP petición y la respuesta se utilizaría para seguimiento de la sesión?

En la respuesta HTTP, el servidor puede establecer una cookie. Lo hace con el encabezado Set-Cookie. Por ejemplo:

Set-Cookie: session=12345; path=/ 

continuación, el cliente devuelve el valor de todas las cookies que coinciden con las propiedades que se establecieron junto con la cookie, que pueden incluir ruta (como el anterior) y el dominio, y que no hayan expirado todavía.

La cookie se envía de vuelta al servidor como parte de los encabezados HTTP. Por ejemplo:

Cookie: session=12345 

La información de la propiedad original no se envía con la cookie.

Una cookie única permite que el servidor asocie una clave única con una instancia de navegador particular. El servidor puede usar esa clave como un índice en una tabla hash o una tabla de base de datos que contiene información de estado única por usuario.

+0

que fue realmente útil. gracias ... – dexter

0

encontrar suficientes detalles here

sesiones HTTP son el método recomendado. Una sesión identifica las solicitudes que se originan en el mismo navegador durante el período de conversación. Todos los servlets pueden compartir la misma sesión. JSESSIONID es generado por el servidor y puede pasarse al cliente a través de cookies, reescritura de URL (si las cookies están desactivadas) o mecanismo SSL integrado. Se debe tener cuidado para minimizar el tamaño de los objetos almacenados en la sesión y los objetos almacenados en la sesión deben ser serializables. En un servlet de Java, la sesión se puede obtener de la siguiente manera:

HttpSession session = request.getSession(); // devuelve la sesión actual o una nueva sesión

Las sesiones se pueden agotar (configuradas en web.xml) o anularse manualmente.