2010-09-27 13 views
23

Escribo una clase pequeña que actúa como un cliente HTTP muy básico. Como parte de un proyecto en el que estoy trabajando, lo estoy haciendo consciente de las cookies. Sin embargo, no me queda claro qué sucede cuando mi cliente recibe múltiples encabezados "Set-Cookie" con la misma clave, pero se establecen diferentes valores.Varios encabezados de conjunto de cookies en HTTP

Por ejemplo,

Set-Cookie: PHPSESSID=abc; path=/ 
Set-Cookie: PHPSESSID=def; path=/ 
Set-Cookie: PHPSESSID=ghi; path=/ 

¿Cuál de estos se supone que es el valor de PHPSESSID? Esto generalmente termina cuando llamas a session_start() y luego a session_regenerate_id() en la misma página. Cada uno establecerá su propio encabezado. Todos los navegadores parecen estar de acuerdo con esto, pero parece que mi cliente no puede elegir el correcto.

¿Alguna idea ?!

Respuesta

21

RFC 6265 section 4.1.2 estados:

Si el agente usuario recibe una nueva cookie con la misma cookie-nombre,
dominio de valor, y la ruta de valor como una cookie que ya ha almacenado,
la la cookie existente se desaloja y se reemplaza con la nueva cookie.
Observe que los servidores pueden eliminar las cookies enviando al agente de usuario una nueva cookie
con un atributo Expires con un valor en el pasado.

Así que procesaría los encabezados en el orden indicado y los sobrescribiría si hubiera un duplicado. Entonces, en su caso, tendría solo un PHPSESSID = ghi.

10

RFC 6265 estados:

servidores no debe incluir más de un campo de cabecera Set-Cookie en la misma respuesta con la misma cookie-nombre.

Por lo tanto, me preocuparía mucho si su servicio envía múltiples encabezados Set-Cookie con la misma clave. Especialmente porque he visto que los agentes de usuario y los proxies se comportan inesperadamente, a veces tomando el valor del primer encabezado, a veces reordenando los encabezados.

Como cliente, el comportamiento típico del agente de usuario parece ser tomar el valor del último encabezado. El RFC alude a ese comportamiento con esta afirmación:

Si el agente de usuario recibe una nueva cookie con el mismo nombre de cookie, dominio-valor y ruta como una cookie que ya ha almacenado, la existente la cookie se desaloja y se reemplaza con la nueva cookie.

+0

No significa que no deba enviar múltiples encabezados set-cookie. Se trata de múltiples encabezados con el mismo nombre de cookie. – Blaze

+0

Solucionado, en caso de que no fuera claro desde el contexto del OP. –

Cuestiones relacionadas