PHP – obsługa cookies i sesje


Ciasteczka – Cookies, to krótkie informacje tekstowe, wysyłane przez stronę internetową, które za pośrednictwem przeglądarki zapisywane są na komputerze użytkownika. Cisteczka wykorzystywane są do zapamiętywania dowolnych danych, które można zakodować w postaci ciągu znaków, dzięki czemu użytkownik nie musi wpisywać tych samych danych za każdym razem, gdy odwiedzi daną stronę WWW  np. login użytkownika, zawartość koszyka, nasze preferencje, ankieta którą już wypełnialiśmy, czy preferowany język na stronie itp.

Gdy posiadamy formularz rejestracji wszystkie dane możemy przechowywać w bazie, ale dzięki ciastkom możemy ominąć ten proces. Wystarczy, że użytkownik raz coś wybierze i jego preferencje zostaną zapisane, do momentu ich zmiany lub usunięcia. Oczywiście należy mieć na uwadze, ze użytkownik wyłączy zapisywanie ciasteczek.

Ciasteczka identyfikują dane komputera i przeglądarki, która korzysta ze strony WWW. W żaden sposób nie są szkodliwe dla naszego sprzętu, nie zmieniają ustawień konfiguracyjnych.

Ciasteczka mogą być odczytane tylko z poziomu domeny, z której pochodzą.

Ciasteczka są wymieniane przy przesyłaniu nagłówków HTTP, zanim strona WWW zostanie załadowana, po załadowaniu strony wysłanie ciasteczka jest niemożliwe. Należy zatem umiejętnie zaplanować wysyłanie ciasteczek. Kod wysyłający ciasteczko musi znajdować się jako pierwszy, zanim jakakolwiek informacja zostanie przesłana.

Podstawowe rodzaje ciasteczek

„Cookies” sesyjne – są to tymczasowe informacje przechowywane w pamięci przeglądarki do momentu zakończenia sesji przeglądarki, czyli do momentu jej zamknięcia.

„Cookies” stałe, nazywane również „śledzące„cookie” (ang. tracking cookies) –pozostają w pamięci przeglądarki przez dłuższy okres. Czas ten zależy od wyboru, którego można dokonać w ustawieniach przeglądarki. Ten rodzaj cookies zezwala na przekazywanie informacji na serwer za każdym razem, gdy odwiedzana jest dana strona.

„Cookies” podmiotów zewnętrznych – (ang. third parties cookies) – to informacje pochodzące np. z serwerów reklamowych, serwerów firm i dostawców usług (np. wyszukiwania albo map umieszczanych na stronie) współpracujących z właścicielem danej strony internetowej. Ten rodzaj cookie pozwala dostosowywać np. reklamy do preferencji i zwyczajów ich użytkowników.

Tworzenie ciasteczek

Wyślemy ciasteczko o nazwie „login” i wartości „JohnSmith” oraz „pass” o wartości „admin”. Ustawimy żywotność ciasteczka na 60 sekund. Do ustawienia ciasteczka wykorzystujemy funkcję setcookie($nazwa, $wartosc, $czas), która posiada wiele argumentów, ale najczęściej wykorzystuje się 3 pierwsze (więcej informacji o setcookie() na stronie dokumentacji)

<?php

// utworzenie ciasteczek

setcookie(„login”, „JohnSmith”, time()+60);

setcookie(„pass”, „admin”, time()+60);

?>

Jeśli chcesz przypisać wiele wartości do jednego ciasteczka, możesz po prostu złączyć je w tablicę. Na przykład:

<?php

  setcookie(„logowanie[login]”, JohnSmith”, time()+60);

setcookie(„logowanie[pass]”, “admin”, time()+60);

?>

Spowoduje to stworzenie dwóch oddzielnych ciasteczek, mimo, iż „logowanie” będzie teraz pojedynczą tablicą w twoim skrypcie. Jeśli chcesz ustawić tylko jedno ciasteczko z wieloma wartościami, rozważ możliwość użycia przedtem funkcji serialize() lub explode() na wartości.

Można pominąć trzeci parametr, czyli $czas – ciasteczko będzie ważne do zamknięcia przeglądarki (przyjmie wartość 0).

Jeżeli nazwy ciasteczek są takie same, ich wartości zostaną nadpisane (o ile ścieżka lub domena nie są różne) np. dla koszyka do zakupów możesz potrzebować licznika a jego wartość stale przekazywać dalej, tzn.

<?php

if (isset($_COOKIE[‚ile’])) {

    $ile = $_COOKIE[‚ile’] + 1;

} else {

    $ile = 1;

}

setcookie(‚ile’, $ile, time()+3600);

?>

Odczytywanie ciasteczek

Tworzone ciasteczka są automatycznie zapisywane w tablicy superglobalnej $_COOKIE (analogicznie do poznanych już tablic $_POST i $_GET), którą możemy przeglądać i operować danymi w niej zapisanymi.

<?php

if(isset($_COOKIE[‘login’]) && $_COOKIE[‘pass’]))

   echo „dane logowania kompletne”;

else

   echo „Brak ciasteczka z danymi logowania”;

?>

Możemy wyświetlić całą tablicę przy pomocy funkcji print_f:

<?php

echo ‘<pre>’;

print_f($_COOKIE);

echo ‘</pre>’;

?>

Usuwanie ciastek

Aby usunąć ciasteczko należy ustawić dla niego ujemną wartość czasową. Zamiast dodawać do funkcji time() czas przez jaki ma być ważne po prostu go odejmujemy.

setcookie(‚uzytkownik’, $imie, time()-3600);

Powyższy kod usunie ciastko użytkownik z ostatniej godziny.