Co to są cookies i jak z nimi pracować
Skąd pochodzi termin „cookie” nikt autentycznie nie wie, choć uważa się, że w czasach powstania Unix gdzieś używane wyrażenie Magic Cookies. Miał na myśli „wpływy” (token, ticket), którymi wymieniali programy.
Cookie jest rozwiązaniem jednej z dziedzicznych problemów protokołu HTTP (HyperText Transfer Protocol). Ten problem jest o nietrwałości połączenia między klientem a serwerem, jak FTP czy Telnet sesji, czyli dla każdego dokumentu (lub pliku) podczas transmisji protokołu HTTP jest przesyłany odrębny wniosek. Jak włączyć cookies w protokół HTTP dało częściowe rozwiązanie tego problemu. Inaczej mówiąc, transakcja kończy się po tym, jak przeglądarka się zapytanie, a serwer wydał odpowiednią odpowiedź. Zaraz po tym serwer „zapomina” o użytkowniku i każdy następny wniosek tego samego użytkownika uważa nowym użytkownikiem.
Za pomocą plików cookie, można emulować sesję dla protokołu HTTP. Krótko zasada emulacji sesji brzmi: na pierwszym zapytaniu wydawana jest odpowiednia wartość cookie, a przy każdym kolejnym żądaniu to wartość czyta ze zmiennej środowiskowej HTTP_COOKIE i odpowiednio przetwarzane.
Prosty przykład: mam formularz, w którym użytkownik jest proszony o podanie swojego imienia, z niej wywołuje skrypt, прописывающий wartość cookie w przeglądarce użytkownika. Przy każdym kolejnym wejściu na podstawie analizy wartości cookie z przeglądarki użytkownika na stronie pojawia się właśnie powitanie (jeśli jest ustawiona wartość cookie), albo oryginalna forma z pytaniem o nazwę użytkownika (jeśli wartość cookie nie jest zainstalowany).
Cookie – jest to niewielka porcja informacji tekstowych, które serwer wysyła do przeglądarki. Przeglądarka będzie przechowywać te informacje i przekazywać je do serwera z każdym pytaniem, jako część nagłówka HTTP. Jedne wartości cookie mogą być przechowywane tylko w ciągu jednej sesji, są one usuwane po zamknięciu przeglądarki. Inne zainstalowane na pewien okres czasu, są rejestrowane w pliku. Zwykle plik ten nazywa się ‚cookies.txt’ i leży w katalogu roboczym zainstalowanej na komputerze przeglądarki. U mnie, na przykład, w tym pliku zawiera następujący:
# Netscape HTTP Cookie File
# http://www.netscape.com/newsref/std/cookie_spec.html
# This is a generated file! Do not edit.
www.webclub.ru FALSE /ourweb FALSE 946683907 1 1
.bizlink.ru TRUE / FALSE 915148488 u_irads_watch 627633
.doubleclick.net TRUE / FALSE 1920499140 id 332666ae
.yahoo.com TRUE / FALSE 915144943 Y v=1&n=6jm0u5lgubh1k&l=0b8a0d3h/o&p=m29vvru7130a
.yahoo.com TRUE / FALSE 915144943 T z=3587c277
mail.yahoo.com TRUE / FALSE 943919791 YM.Login
id%3d%241%24rm%24L6MDTCsrCNnk3syLZl2zo.%26sid%3dszxPh4SazGg/%250a%26ts%3dX%2588%25c3%2506%25d3%25e5I-%255d%253f%2597%25ddu
.preferences.com TRUE / FALSE 1182140165 PreferencesID 3AGN9WD1D80gQfjvjAxRuq
.geocities.com TRUE / FALSE 900743217 iTag gY6bZzWItDQAAWll3T8ASk1vbiwgMTMg
search.netscape.com FALSE / FALSE 942189477 NGUserID cfc84d2a-522-898178454-1
www.webclub.ru FALSE FALSE 913543999 visited yes
Jak widać, u mnie zostawili cookie Rosyjski klub webmasterów, wyszukiwarka AltaVista, bezpłatny serwer poczty Yahoo, Netscape Communications, sieci reklamowych firmy DoubleClick i krajowy InterReklama. Obecnie większość przeglądarek obsługuje mechanizm cookies. Wiem, że cookie można używać we wszystkich wersjach Netscape Navigator, Microsoft Internet Explorer i NCSA Mosaic.
Co można zrobić za pomocą cookie?
Same w sobie pliki cookie nie mogą zrobić nic, to tylko niektóre informacje tekstowe. Jednak serwer może odczytać zawarte w cookies informacje i na podstawie jej analizy wykonywać te lub inne działania. Na przykład, w przypadku autoryzowanego dostępu do niczego albo przez WWW do plików cookie zostanie zapisany login i password w ciągu sesji, co pozwala użytkownikowi nie wprowadzać ich ponownie podczas zapytań każdego dokumentu zabezpieczonego hasłem.
Do korzystania z plików cookies oraz często budują opcje składania zamówień w sklepach internetowych, w szczególności, w największym wirtualnym księgarni Amazon Books realizowane swoista wirtualna kosz kupującego, jak w normalnym realnym supermarkecie, w które serwer zapisuje informacje o wszystkich zamówionych książek. Użytkownik po prostu zaznacza interesujące go książki, a następnie sporządza zakup wszystkich zaznaczonych książek.
Innym częstym obszar stosowania cookies – podczas konfiguracji indywidualnego profilu każdego zarejestrowanego użytkownika.
I wreszcie ostatni obszar – wykorzystanie mechanizmu cookie w branży reklamowej w Internecie. Jeszcze rok temu reklama w Internecie za pieniądze był dość egzotyczny usługą, a teraz ten biznes już устоялся i szybko się rozwija. Jednak reklamodawcy zaczynają okazywać bardziej rygorystyczne warunki do oceny efektywności swoich wydatków. Cookie używane do targetowania reklam (określenia grupy docelowej, np. przez położenie geograficzne użytkowników), śledzenie zainteresowań użytkowników, z wyjątkiem liczby wyświetleń i przejść przez banery.
Praca z cookie
Teraz, gdy z zasadami działania i obszary zastosowania cookie jest mniej lub bardziej jasne, można przystąpić do nauki formatu i składni, a także sposobów określenia wartości cookie.
Format i składnia cookie
Proponowane przeze mnie w tym artykule opis formatu i składni cookie jest freestyle wrażenia opowiadając pierwotnej specyfikacji Netscape Communications „Persistent Client State HTTP Cookies”. W tej chwili trwa opracowanie bardziej ścisłej specyfikacji dla cookie. Tak więc, cookie jest częścią nagłówka HTTP. Pełny opis pola Set-Cookie HTTP nagłówka:
Set-Cookie: nazwa=WARTOŚĆ; expires=DATA; path=PATH; domain=NAZWA_DOMENY; secure
Minimalna opis pola Set-Cookie HTTP nagłówka:
Set-Cookie: nazwa=WARTOŚĆ;
NAME=VALUE – ciąg znaków, z wyjątkiem tłumaczenia wiersza, przecinki i spacje. NAME-nazwa cookie, VALUE – wartość. Nie jest dozwolone korzystanie z dwukropek, średnik i spacja.
expires=DATE – czas przechowywania cookies, tj. zamiast DATE powinna być data w formacie „expires=Monday, DD-Mon-YYYY HH:MM:SS GMT”, po którym wygasa czas przechowywania plików cookie. Jeśli ten atrybut nie jest określony, cookie jest przechowywany w ciągu jednej sesji, do czasu zamknięcia przeglądarki.
domain=NAZWA_DOMENY – domeny, dla którego wartość cookie naprawdę. Na przykład, „domain=cit-forum.com”. W tym przypadku wartość cookie będzie naprawdę i do domeny cit-forum.com i dla www.cit-forum.com. Ale nie cieszcie się, wskazówki dwóch ostatnich okresów nazw domen wystarcza tylko dla domen hierarchii „COM”, „EDU”, „NET”, „ORG”, „GOV”, „MIL” i „INT”. Dla omawianych teraz nowych siedmiu domen pierwszego poziomu („FIRM”, „SHOP”, „WEB”, „ARTS”, „REC”, „INFO”, „NOM”), prawdopodobnie ten stan się utrzyma. Dla hierarchii domen „PL”, na przykład, będzie musiał wskazać trzy okresy.
Jeśli atrybut ten zostanie pominięty, domyślnie jest to nazwa domeny serwera, na którym został ustawiony na wartość cookie.
path=PATH – ten atrybut określa podzbiór dokumentów, dla których naprawdę wartość cookie. Na przykład, określenie „path=/win” doprowadzi do tego, że wartość cookie będzie naprawdę dla wielu dokumentów w katalogu /win/ w katalogu /wings/ i plików w bieżącym katalogu z nazwami typu wind.html i windows.shtml. W celu cookie отсылались przy każdym żądaniu do serwera, należy wskazać katalog główny serwera, na przykład, „path=/”.
Jeśli ten atrybut nie jest określony, wartość cookie stosuje się tylko na dokumenty w tym samym katalogu co dokument, w którym stwierdzono wartość cookie.
secure – jeśli warto ten uchwyt, to informacje cookie jest przesyłany tylko przez HTTPS (HTTP z wykorzystaniem SSL – Secure Socket Level), w trybie chronionym. Jeśli ten znacznik nie jest określony, informacje przekazywane są w sposób normalny.
Składnia nagłówka HTTP pola Cookie
Gdy żądany dokument z serwera HTTP, przeglądarka sprawdza swoje cookie na zgodność z domeny serwera i innych informacji. W przypadku, gdy znaleziono spełniające wszystkie kryteria wartości cookie, przeglądarka wysyła je do serwera w postaci pary nazwa/wartość:
Cookie: NAZWA1=OPAQUE_STRING1; NAME2=OPAQUE_STRING2 …
Aby uzyskać więcej informacji
Jednocześnie można zadawać wiele wartości cookie.
W przypadku, gdy cookie przyjmuje nową wartość przy istniejącym już w przeglądarce cookie korzystają z tej samej metody NAME, domain i path, to stara wartość zostanie zmieniona na nową. W pozostałych przypadkach nowe wartości cookie są dodawane do starych.
Korzystanie z expires nie gwarantuje bezpieczeństwo cookie w ciągu określonego okresu czasu, ponieważ klient (przeglądarka) może usunąć wpis z powodu braku wybranego miejsca lub jakichkolwiek innych powodów.
Klient (przeglądarka) ma następujące ograniczenia dotyczące cookies:
tylko może pomieścić do 300 wartości cookies
każdy plik cookie nie może przekraczać 4Кбайт
z jednego serwera lub domeny można zapisać do 20 ustawień cookie
Jeśli limit 300 lub 20 zostanie przekroczony, to usuwany jest pierwszy w czasie nagrywania. W przypadku przekroczenia limitu objętości w 4Кбайт poprawność wartości cookie cierpi – odcięty kawałek nagrania (od rozpoczęcia nagrywania) równy zwiększonej objętości.
W przypadku buforowania dokumentów, na przykład, proxy-serwer, pole Set-cookie HTTP tytułu nigdy nie jest buforowana.
Jeśli proxy-serwer przyjmuje odpowiedź, która zawiera pole Set-cookie w nagłówku, zakłada się, że pole dochodzi do klienta, niezależnie od kodu powrotu 304 Not Modified) lub 200 (OK). Odpowiednio, jeżeli żądanie klienta znajdują się w nagłówku Cookie, musi dojść do serwera, nawet jeśli na sztywno ustawiony parametr If-modified-since.
Poniżej przedstawiono kilka przykładów ilustrujących użycie cookies
Przykład 1. Zarządzanie podzbiór dokumentów, dla których obowiązują wartości cookie, a ich okres przydatności do spożycia
Przeglądarka żąda dokumentu i odbiera od serwera w odpowiedzi:
Set-Cookie: CUSTOMER=WILE_E_COYOTE; path=/; expires=Wednesday, 09-Nov-99 23:12:40 GMT
Gdy przeglądarka pobiera adresu URL przez „/” na tym serwerze, on wysyła do serwera: