Podręcznik PHP
Poprzedni |  | Następny

# setcookie

(PHP 3, PHP 4 )

setcookie -- Wysyła ciasteczko

## Opis

int setcookie ( string nazwa [, string wartość [, int data_ważności [, string ścieżka [, string domena [, int bezpieczne]]]]])

setcookie() określa ciasteczko (ang. cookie) do wysłania z nagłówkami HTTP. Ciasteczko musi być wysłane zanim jakiekolwiek inne nagłówki zostaną wysłane (to jest ograniczenie ciasteczek, nie PHP). To wymaga od ciebie umieszczenia wywołań tej funkcji przed znacznikami `<html>` czy `<head>`.

Wszystkie argumenty poza `nazwa` są opcjonalne. Jeśli tylko argument nazwa jest obecny, ciasteczko o takie nazwie zostanie usunięte z klienta. Możesz też opuścić argumenty za pomocą pustego łańcucha (""). Argumenty `data_ważności` i `bezpieczne` są liczbami całkowitymi i nie można ich opuścić wstawiając pusty łańcuch. Zamiast niego użyj liczby zero (0). Argument `data_ważności` jest regularnym uniksowym znacznikiem czasu, takim jak zwracany przez funkcje time() lub mktime (). Argument `bezpieczne` oznacza, że ciasteczko może być przekazywane tylko poprzez bezpieczne połączenie HTTPS.

Wysłane ciasteczko jest dostępne już przy następnym załadowaniu strony w tablicy `$_COOKIE`. W wersjach PHP do 4.1.0 była to tablica `$HTTP_COOKIE_VARS`.

Częste pułapki:

- Ciasteczka nie będą widziane do następnego przeładowania strony dla której mają być widoczne.

- Ciasteczko może być usunięte tylko z tymi parametrami, z jakimi je ustawiono.

W PHP 3, wielokrotne wywołania setcookie() w jednym skrypcie wykonywane były w odwrotnej kolejności. Jeśli chcesz usunąć jedno ciastko przed wprowadzeniem kolejnego, powinieneś umieścić wprowadzenie nowego przed usunęciem starego. W PHP 4, wielokrotne wywołania setcookie() wykonywane są we właściwej kolejności.

Parę przykładów - jak wysyłać ciasteczka:

Przykład 1. setcookie() wysyła przykładowe ciasteczka
`setcookie ("TestCookie", $value); setcookie ("TestCookie", $value,time()+3600); /* traci ważność za godzinę */ setcookie ("TestCookie", $value,time()+3600, "/~rasmus/", ".utoronto.ca", 1);`

Aby skasować ciasteczko, należy ustawić datę ważności na datę w przeszłości, co uruchomi w przeglądarce mechanizm kasowania ciasteczek. A teraz, jak usunąć ciasteczka z poprzedniego przykładu:

Przykład 2. Kasowanie ciasteczek
`// ustaw datę ważności na godzinę wstecz setcookie ("TestCookie", "", time() - 3600); setcookie ("TestCookie", "", time() - 3600, "/~rasmus/", ".utoronto.ca", 1);`

Proszę zwrócić uwagę, że zawartość ciasteczka jest automatycznie kodowana do formatu URL przy wysyłaniu, a po odebraniu automatycznie dekodowana i przypisywana do zmiennej o tej samej nazwie co ciasteczko. Aby poznać zawartość przykładowego ciasteczka ze skryptu, należy zastosować poniższy przykład:

`echo $TestCookie; echo $_COOKIE["TestCookie"];`

Można też tworzyć tablice złożone z ciasteczek za pomocą zapisu tablicowego w nazwie ciasteczka. Powoduje to utworzenie tylu ciasteczek, ile jest elemetów tablicy, a po otrzymaniu takiego ciasteczka, jego wartości umieszczane są w tablicy o nazwie takiej jak ciasteczko.

`setcookie ("cookie[three]", "cookiethree"); setcookie ("cookie[two]", "cookietwo"); setcookie ("cookie[one]", "cookieone"); if (isset ($cookie)) { while (list ($name, $value) = each ($cookie)) { echo "$name == $value&lt;br>\n"; } }`

Więcej informacji na temat ciasteczek znajduje się w specyfikacji Netscape'a, na stronie http://www.netscape.com/newsref/std/cookie_spec.html.

Microsoft Internet Explorer 4 z zainstalowanym Service Pack 1 nie radzi sobie poprawnie z ciasteczkami, które mają ustawiony parametr `ścieżka`.

Netscape Communicator 4.05 i Microsoft Internet Explorer 3.x niepoprawnie obsługują ciasteczka, w których `ścieżka` i `data_ważności` nie są ustawione.

Poprzedni | Spis treści | Następny
headers_sent | Początek rozdziału | setrawcookie