W jaki sposób pliki cookie są przekazywane w protokole HTTP?

Odpowiedzi:

295

Serwer wysyła następujące informacje w nagłówku odpowiedzi, aby ustawić pole pliku cookie.

Set-Cookie:wartość nazwy=

Jeśli jest ustawiony plik cookie, przeglądarka wysyła następujące informacje w nagłówku żądania.

Cookie:wartość nazwy=

Aby uzyskać więcej informacji, zobacz artykuł dotyczący plików cookie HTTP na Wikipedii.

deinst
źródło
Czy to prawda, że ​​plik cookie działa tylko z czasownikiem GET / POST, ale nie łączy się?
PerlDev
5
@PerlDev Nie ma nic, co widzę w rfc2109, które mówi, że nie powinno ono działać z żądaniami innymi niż GET / POST, ale podejrzewam, że implementacje przeglądarki i serwera mogą nie implementować go w takich przypadkach.
deinst
5
Należy pamiętać, że zgodnie z RFC 2109, jeśli klient użytkownika lub przeglądarka wyśle ​​wiele plików cookie, umieści je w jednym polu oddzielonym średnikami:Cookie: name1=value1; name2=value2; ...
jotrocken
34

Pliki cookie są przekazywane jako nagłówki HTTP, zarówno w żądaniu (klient -> serwer), jak iw odpowiedzi (serwer -> klient).

Douglas Leeder
źródło
2
więc w każdym zgłoszonym wniosku wszystkie pliki cookie są przesyłane ipso facto?
BKSpurgeon
32

Oprócz tego, co napisano w innych odpowiedziach, inne szczegóły związane ze ścieżką pliku cookie, maksymalnym wiekiem pliku cookie, niezależnie od tego, czy jest zabezpieczone, czy też nie, przekazane również w nagłówku odpowiedzi Set-Cookie. Na przykład:

Set-Cookie:nazwa =wartości [ ; expires=data ] [ ; domain=domena ] [ ; path=ścieżka ] [ ; secure]


Jednak nie wszystkie te szczegóły są przekazywane z powrotem do serwera przez klienta podczas następnego żądania HTTP.

Możesz także ustawić HttpOnlyflagę na końcu swojego pliku cookie, aby wskazać, że plik cookie jest httponly i nie może być dostępny, w skryptach za pomocą kodu javascript. Pomaga to zapobiegać atakom, takim jak przejęcie sesji.

Aby uzyskać więcej informacji, zobacz RFC 2109 . Zobacz także artykuł Nicholasa C. Zakasa, wyjaśniono pliki cookie HTTP .

Mangu Singh Rajpurohit
źródło
2
Oto bezpośredni link do artykułu Zakasa, a nie link powrotny
Joseph Dykstra
13

utwórz przykładowy skrypt jako:

#!/bin/bash

http_code=200
mime=text/html

echo -e "HTTP/1.1 $http_code OK\r"
echo "Content-type: $mime"
echo
echo "Set-Cookie: name=F"

następnie wykonaj plik wykonywalny i wykonaj w ten sposób.

./resp | nc -l -p 12346

otwórz przeglądarkę i przeglądaj URL: http: // localhost: 1236 zobaczysz wartość Cookie, która jest wysyłana przez przeglądarkę

    [aaa @ bbbbbbbb] $ ./resp | nc -l -p 12346
    GET / HTTP / 1.1
    Host: xxx.xxx.xxx.xxx:12346
    Połączenie: utrzymuj przy życiu
    Kontrola pamięci podręcznej: maksymalny wiek = 0
    Akceptuj: tekst / html, application / xhtml + xml, application / xml; q = 0,9, image / webp, * / *; q = 0,8
    Żądania aktualizacji - niepewne: 1
    User-Agent: Mozilla / 5.0 (Windows NT 6.1) AppleWebKit / 537.36 (KHTML, jak Gecko) Chrome / 49.0.2623.112 Safari / 537.36
    Accept-Encoding: gzip, deflate, sdch
    Accept-Language: en-US, en; q = 0,8, ru; q = 0,6
    Cookie: name = F.
FariZ
źródło
3
Co się stanie, jeśli istnieje wiele plików cookie? Czy są oddzielone przecinkami?
Mark Buikema
myślę, że są ustawione jako nowy plik cookie. Cookie: name = F Cookie: name = A
EAzevedo
2
@MarkBuikema, patrz docs.microsoft.com/en-us/windows/desktop/wininet/http-cookies . Są wysyłane jak: Cookie: <nazwa> = <wartość> [; <nazwa> = <wartość>] ...
Ben Wheeler