2010-09-27 16 views
23

Piszę małą klasę, która działa jako bardzo prosty klient HTTP. W ramach projektu, nad którym pracuję, robię to świadomie. Jednak nie jest dla mnie jasne, co dzieje się, gdy mój klient otrzymuje wiele nagłówków "Set-Cookie" z tym samym kluczem, ale ustawione są różne wartości.Wiele nagłówków Set-cookie w HTTP

Na przykład

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

Który z nich ma być wartość PHPSESSID? Zwykle dzieje się tak, gdy wywołasz session_start(), a następnie session_regenerate_id() na tej samej stronie. Każdy ustawi własny nagłówek. Wygląda na to, że wszystkie przeglądarki działają dobrze, ale nie mogę sprawić, że mój klient wybierze właściwy.

Jakieś pomysły ?!

Odpowiedz

21

RFC 6265 section 4.1.2 stany:

Jeśli agent użytkownik otrzymuje nowe ciasteczko z tego samego pliku cookie-name,
domeny wartość, a path-wartość jako cookie że już zapisany,
się Istniejący plik cookie zostaje wyeksmitowany i zastąpiony nowym plikiem cookie.
Należy zauważyć, że serwery mogą usuwać pliki cookie, wysyłając plik użytkownika o nowym pliku cookie o wartości
z atrybutem Expires z wartością z przeszłości.

Przetwarzam więc nagłówki w kolejności podanej i nadpisuję je, jeśli istnieje duplikat. W twoim przypadku miałbyś tylko jeden PHPSESSID = ghi.

10

RFC 6265 stany:

Serwery nie powinny obejmować więcej niż jedno pole nagłówka Set-Cookie w tej samej odpowiedzi z tego samego pliku cookie-name.

Byłbym bardzo zaniepokojony, gdyby Twoja usługa wysyłała wiele nagłówków Set-Cookie z tym samym kluczem. Zwłaszcza, że ​​widziałem, jak agenty użytkownika i proxy zachowują się nieoczekiwanie - czasami pobierając wartość pierwszego nagłówka, czasami zmieniając nagłówki.

Typowym zachowaniem klienta, jak klienta, wydaje się być przyjęcie wartości ostatniego nagłówka. RFC nawiązuje do tego zachowania z tym stwierdzeniem:

Jeśli agent użytkownik otrzymuje nowe ciasteczko z tego samego pliku cookie-name, domeny wartości i ścieżki wartości jako plik cookie, które zostały już przechowywanej, istniejące cookie zostaje eksmizowane i zastąpione nowym plikiem cookie.

+0

Nie oznacza to, że nie należy wysyłać wielu nagłówków plików cookie. Mówi wiele nagłówków o tej samej nazwie pliku cookie. – Blaze

+0

Naprawiono, na wypadek gdyby nie było to jasne z kontekstu OP. –

Powiązane problemy