Document (rozszerzenie)#
document.cookie#
Właściwość cookie
zwraca ciasteczka HTTP (HTTP cookies) w postaci tekstowej, które mają zastosowanie dla danego dokumentu lub ramki. Ciastka można dowolnie modyfikować, czyli kasować, zmieniać lub tworzyć nowe.
W przypadku odczytywania właściwości, wszystkie ciasteczka są zwracane w postaci pojedynczego łańcucha znakowego, gdzie każde ciasteczko wyrażane jest jako para nazwa=wartość
, a poszczególne pary oddzielone są od siebie znakiem średnika (";"). W przypadku braku ciasteczek zwrócony zostanie pusty łańcuch.
ciastko1=wartość1;ciastko2=wartość2;ciastko3=wartość3;...
W przypadku ustawiania właściwości możliwe jest jedynie utworzenie/modyfikacja/kasacja jednego ciasteczka poprzez podanie łańcucha znakowego w postaci pary nazwa=wartość
. Dodatkowo za wartość
można jeszcze umieścić kolejne informacje na temat ciasteczka wyrażane za pomocą zapisu ;nazwa=wartość
. Oto możliwości:
;path=path
- dostęp do ciasteczka mają jedynie strony ze wskazaną sciężką, np."/"
,"/katalog"
. Jeśli nie określono ścieżki, domyślną ścieżką jest bieżący adres absolutny danego dokumentu.;domain=domain
- dostęp do ciasteczka mają jedynie strony ze wskazanej domeny, np."example.com"
,".example.com"
(włącznie ze wszystkimi subdomenami),"subdomain.example.com"
. Jeśli nie określono domeny, domyślną domeną jest domena z bieżącego adresu absolutnego danego dokumentu.;max-age=seconds
- ustala czas ważności ciasteczka wyrażany w sekundach, np.60*60*24*365
dla całego roku. Jeśli nie określono czasu lub daty ważności, ciasteczko wygasa na końcu sesji. Podanie wartości zerowej powoduje usunięcie ciasteczka.;expires=dateGMTString
- ustala datę ważności ciasteczka w formacie GMT. Jeśli nie określono daty lub czasu ważności, ciasteczo wygasa na końcu sesji. Datę w odpowiednim formacie można uzyskać za pomocą metodytoUTCString()
. Podanie daty wstecznej względem bieżącej powoduje usunięcie ciasteczka.;secure
- ciasteczko może być przesyłane jedynie przez bezpieczny protokół, np.https
.
Wartość ciasteczka nie może zawierać przecinków, średników oraz znaków spacji. W razie potrzeby można zastosować globalne metody encodeURIComponent
oraz decodeURIComponent
do zakodowania i rozkodowania problematycznych znaków.
Należy zauważyć, że tylko nazwy i wartości ciasteczek mogą być pobierane za pomocą właściwości cookie
, nie dotyczy to rozszerzonych informacji (czasu lub daty wygaśnięcia, domeny, ścieżki, flagi bezpieczeństwa).
Ustawienie wartości dla już istniejącego ciasteczka spowoduje zmianę starej wartości nową wartością. Parametr max-age
jest nowszym rozwiązaniem wprowadzonym w protokole HTTP 1.1, aczkolwiek nie był wspierany przez przeglądarki IE (włącznie z wersją 8). Więcej na temat ważności ciasteczek można przeczytać w artykule "HTTP Cookies: What's the difference between Max-age and Expires?".
Ciasteczka to stary mechanizm z wieloma wadami. Najważniejszy z nich to problematyczny limit wielkości, zazwyczaj 50 ciasteczek na domenę o łącznej wielkości 4096 bajtów (4 KB), chociaż dokładne wartości są zależne od danej przeglądarki internetowej.
Kolejny problem związanym z klasycznymi ciasteczkami jest z aspekt wydajnościowy. Ciasteczka przesyłane są z każdym żadaniem HTTP, dlatego mogą powodować niepotrzebny wzrost przesyłanych danych oraz mogą mieć negatywny wpływ na czas działania strony WWW. Jeśli nie ma potrzeby wysyłania danych z każdym żądaniem HTTP najlepiej skorzystać z nowszych mechanizmów przechowywania danych po stronie użytkownika wprowadzonych przez HTML5, np. Web Storage, Indexed Database czy Offline Web Applications.
Prosty przykład:
<script>
document.write(document.cookie); // Pusty łańcuch - brak ustawionych ciasteczek
</script>
Oczywiście skrypt będzie miał dostęp do ciasteczek tylko w przypadku tego samego pochodzenia (zarówno skryptu jak i strony). Skrypty pochodzące z innych domen nie mogą odczytywać ciasteczek strony bieżącej. W HTML5 można dodatkowo umieszczać zawartość w piaskownicy (np. dla elementu iframe
z atrybutem sandbox
), dzięki czemu dostęp do ciasteczek zostanie stale zablokowany a próba dostępu i zmiany zwróci błąd SecurityError
.
Ponieważ właściwość cookie
jest dostępna między ramkami frames
, możliwości ograniczania ciasteczek poprzez ścięzkę są tylko narzędziem pomagającym zarządzać, które pliki cookie są wysyłane do poszczególnych części strony, i nie są w żadnym wypadku funkcjami bezpieczeństwa.
W zasobach WWW znajduje się wiele gotowych bibliotek lub funkcji ułatwiających kompleksowe odczytywanie i manipulację ciasteczkami. W razie potrzeby można napisać własny lub zmodyfikować już istniejący kod.
Interfejs Web IDL#
attribute DOMString cookie;