7 de abril de 2011

Cookies de sesión con el mismo nombre y mismo servidor GlassFish 2.1

¿Ocurre un error cuando se utilizan dos cookies de sesión que tienen el mismo nombre y provienen del mismo servidor? La respuesta es: depende. No ocurrirá error si tienen diferente ruta (path).

Las cookies de sesión permiten a una aplicación en un servidor web mantener el estado de la navegación entre cada acceso. Son necesarias debido a que el protocolo HTTP es stateless.

El servidor de aplicaciones Java EE GlassFish 2.1, no permite cambiar el nombre de la cookie de sesión de una aplicación. Inicialmente, esto crea un problema, debido a que las diferentes aplicaciones en dicho servidor tendrán sus cookies de sesión con el mismo nombre y la misma ruta (path). Por omisión, la ruta de todas las cookies de sesión es "/".) El resultado es que la sesión parecerá borrarse cuando el navegador accede alternadamente las aplicaciones.

Es necesario especificar una ruta diferente para las cookies de sesión en cada aplicación para evitar el error. Comúnmente, esta ruta será igual al contexto de la aplicación. En GlassFish 2.1, esto se realiza agregando el tag cookiePath al archivo sun-web.xml.

Probamos utilizando Microsoft Internet Explorer versiones 7 y 8, Firefox versiones 3 y 4, y Google Chrome, y todos se comportaron correctamente después del cambio.

A parte de esto, el RFC correspondiente asegura que no tendremos problema si las cookies de sesión de dos aplicaciones web se llaman igual, con tal que tengan diferente ruta:
If a user agent receives a Set-Cookie response header whose NAME is the same as a pre-existing cookie, and whose Domain and Path attribute values exactly (string) match those of a pre-existing cookie, the new cookie supersedes the old. —RFC 2109: HTTP State Management Mechanism
Además, tampoco hay problema si una tiene la ruta "/" y la otra "/Aplicación", pues el navegador siempre regresa la más específica:
If multiple cookies satisfy the criteria above, they are ordered in the Cookie header such that those with more specific Path attributes precede those with less specific.
Obviamente, la primera vez que se acceda la aplicación instalada en el contexto "/Aplicacion", el navegador enviará la cookie que tiene la ruta "/", pero como el servidor web no la tiene registrada generará una nueva.

(Imagen: Cookies! por Yuri Long.)

No hay comentarios.:

Publicar un comentario