2009-06-23 22 views
14

Tengo un problema al usar la clase de Cookie Servlet API 2.5 en Tomcat. Saco la lista de cookies del objeto HttpServletRequest e iterar sobre ellos, así:Java Servlet API 2.5 Cookie.getDomain() siempre devuelve nulo

Cookie[] cookies = request.getCookies(); 

for(Cookie cookie : cookies) { 
    System.out.println("Name=" + cookie.getName() + " Domain=" + cookie.getDomain()); 
} 

Sin embargo, para que cada galleta única en la solicitud del dominio es nulo. ¿Por qué es esto? La razón por la que estoy preguntando es porque tengo una cookie con el mismo nombre en dos dominios diferentes y quiero poder diferenciarlos según el dominio. Para ayudar a aclarar la situación, mis cookies con el mismo nombre se establecen en .anydomain.net y .subdomain.anydomain.net. Ambos se envían en la solicitud, pero los dominios son nulos cuando llegan al servlet. ¿Es el comportamiento esperado que el servlet no puede ver el dominio de las cookies que se le envían?

Editar: Establecí las cookies junto con el dominio, la caducidad y la ruta en una solicitud anterior al servlet. La siguiente solicitud que ingresa al navegador con estas cookies muestra el dominio como nulo. He verificado que las cookies se establecen en los dominios correctos en el navegador.

Edición 2: Estoy usando Tomcat 6

+0

Puede establecer puntos de interrupción en el método setName() y setDomain() para comprobar si el contenedor de servlet analiza correctamente el encabezado de la cookie. ¿Su cookie tiene dos puntos (:) en ella? Algunas versiones recientes de Tomcat no aceptan la mayoría de las cookies con dos puntos. – akarnokd

Respuesta

22

¿Estás seguro de que usted puede conseguir cualquier cosa excepto el valor de la solicitud de galletas? El navegador enviará solo name = value en el encabezado HTTP Cookie.

Otros atributos (seguro, dominio, ruta, caducidad) solo están disponibles para las cookies que configura en la respuesta usted mismo. Se usan para crear los encabezados de respuesta Set-Cookie.

7

Las propiedades como dominio solo se utilizan para una cookie cuando forma parte de la respuesta (es decir, en el encabezado Set-Cookie). Un cliente (como un navegador web) solo debe enviar las cookies que tienen el dominio correcto (ruta, etc.). Por lo tanto, la solicitud solo ve valores porque el encabezado en sí (Cookie) solo contiene valores. Su cliente no debe enviar cookies de diferentes dominios al servidor.

Cuestiones relacionadas