2010-09-27 17 views
23

Sto scrivendo una piccola classe che funge da client HTTP di base. Come parte di un progetto su cui sto lavorando, lo sto rendendo consapevole dei cookie. Tuttavia, non mi è chiaro cosa succede quando il mio cliente riceve più intestazioni "Set-Cookie" con la stessa chiave ma vengono impostati valori diversi.Più intestazioni cookie set-set in HTTP

Per esempio,

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

Quale di questi si suppone essere il valore per PHPSESSID? Questo di solito accade quando chiamate session_start() e session_regenerate_id() sulla stessa pagina. Ognuno imposterà la propria intestazione. Tutti i browser sembrano fare bene, ma non riesco a convincere il mio cliente a scegliere quello giusto.

Qualche idea ?!

risposta

2

La risposta dovrebbe essere in draft-ietf-httpstate-cookie.

+1

Dal momento della pubblicazione, questo è stato sostituito da RFC 6265. –

21

RFC 6265 section 4.1.2 stati:

Se l'agente utente riceve un nuovo cookie con lo stesso cookie-nome,
dominio rapporto qualità-prezzo e il percorso-valore come un cookie che ha già memorizzato,
il il cookie esistente viene rimosso e sostituito con il nuovo cookie.
Si noti che i server possono eliminare i cookie inviando allo user agent un nuovo cookie
con un attributo Expires con un valore nel passato.

Quindi vorrei elaborare le intestazioni nell'ordine indicato e sovrascriverle se c'è un duplicato. Quindi nel tuo caso avresti solo un PHPSESSID = ghi.

10

RFC 6265 stati:

I server non dovrebbe comprendere più di un campo di intestazione Set-Cookie nella stessa risposta con lo stesso cookie-nome.

Sarei quindi molto preoccupato se il servizio invia più intestazioni Set-Cookie con la stessa chiave. Soprattutto perché ho visto agenti utente e proxy comportarsi in modo inaspettato - a volte prendendo il valore della prima intestazione, a volte riorganizzando le intestazioni.

In qualità di client, il comportamento tipico dell'agente utente sembra essere quello di prendere il valore dell'ultima intestazione. La RFC allude a quel comportamento con questa affermazione:

Se l'agente utente riceve un nuovo cookie con lo stesso cookie-nome, dominio-valore, e il percorso-valore come un cookie che ha già memorizzato, l'attuale il cookie viene rimosso e sostituito con il nuovo cookie.

+0

Non è detto che non debba inviare più intestazioni di cookie di set. Sta dicendo intestazioni multiple con lo stesso nome-cookie. – Blaze

+0

Risolto, nel caso in cui non fosse chiaro dal contesto dell'OP. –

Problemi correlati