Metodą nie tyle przekazywania parametrów, co przechowywania
niewielkich ilości danych na komputerze oglądającego stronę (np.
informacje o imieniu i nazwisku lub nazwie użytkownika w tym
serwisie) jest mechanizm cookies (ciasteczka). Ciasteczka ustawione
przez dany serwis dostępne są tylko dla niego i ustawiane są na
jakiś czas.
Ciasteczka przekazywane są za pomocą nagłówków HTTP. Muszą być one
wysłane zanim do przeglądarki zostanie wysłana jakakolwiek inna
treść. W związku z tym przed zapisaniem ciasteczka nie może być
żadnego wywołania funkcji echo i pochodnych, a także tag
otwierający tryb PHP musi być pierwszymi znakiami w pliku - nie
może być żadnej spacji ani pustych wierszy. Ograniczenie to można
obejść używając buforowania wyjścia - po szczegóły odsyłam do
podręcznika PHP.
PHP automatycznie odczytuje ciasteczka i zamienia je na zmienne. Są one
przechowywane w superglobalnej tablicy asocjacyjnej $_COOKIE (dawniej
$HTTP_COOKIE_VARS), w której kluczami są nazwy ciasteczek.
Ciasteczka ustawia się je pomocą funkcji setcookie( nazwa,
wartość, czas_wygaśnięcia, ścieżka, domena,
bezpieczeństwo). Tylko
pierwszy parametr jest niezbędny. Oznacza on nazwę cookiesa
- taką nazwą będzie miała zmienna stworzona przez PHP po ponownym odczytaniu
ciastek. Funkcja parametru "wartość" jest chyba oczywista - taka wartość
będzie przechowana w ciasteczku o podanej nazwie. Parametr czas_wygaśnięcia
oznacza czas, po jakim ciastko zostanie skasowane. Czas ten należy podać jako
ilość sekund od 1.1.1970 - tak jest przechowywany czas w systemach
UNIX'owych. Aktualny czas w tym formacie zwracany jest przez funkcję
time(). Jeśli cookie ma być trzymany przez godzinę, to do czasu
zwróconego przez time() należy dodać ilość sekund zawartych w godzinie -
"time() + 3600". Podobnie należy postępować w przypadku innych przedziałów
czasu.
Przedziały czasu dla funkcji setcookie
-
godzina - time()+3600
-
dzień - time()+86400
-
miesiąc - time()+30*86400
Jeśli czas będzie wcześniejszy niż aktualny czas, ciasteczko
zostanie skasowane. Jeśli będzie równy zero - ciasteczko będzie
ważne tylko do zamknięcia przeglądarki.
Dwa następne parametry używane są do wskazania adresu, dla którego
dostępne będą cookiesy. Jeśli ostatni parametr jest ustawiony na
1, to cookie będzie przesłany za pomocą szyfrowanego połączenia
HTTPS.
Standardowo nie ma możliwości przechowywania tablic w ciasteczkach,
lecz można to zrobić "na około". Przed zapisaniem tablicy w
ciasteczku należy użyć funkcji serialize().
Zamienia ona tablicę na ciąg znaków. Do ponownego odczytania takiej
tablicy służy funkcja unserialize().
Przykład 7.2. Serializacja i deserializacja tablicy
<?php // zapis $tablica = Array('a' => 'pierwszy', 'b' => 'drugi'); setcookie('tablica', serialize($tablica), time()+3600); // odczyt zabezpieczony przed nieistniejącym ciasteczkiem if (isset($_COOKIE['tablica'])) { $tablica = unserialize($_COOKIE['tablica']); } else { $tablica = Array(); } ?>
|
W PHP nowszych od 4.1.0 istnieje jeszcze superglobalna tablica
$_REQUEST, która łączy w sobie tablice
$_GET, $_POST,
$_COOKIE i $_FILES.