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. Ciasteczka 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)
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.
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.
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', "Ala", time()-3600);
Powyższy kod usunie ciastko użytkownik z ostatniej godziny.
Przykład:
W oparciu o mechanizm ciasteczek skrypt wypisuje na stronie komunikaty:
‒ Gdy odwiedzający wejdzie na stronę pierwszy raz zakładane jest ciasteczko z czasem trwania 2 godziny od utworzenia oraz wyświetlany jest w paragrafie, czcionką pogrubioną, komunikat: „Dzień dobry! Strona lotniska używa ciasteczek”
‒ Jeżeli odwiedzający w ciągu 2 godzin od poprzedniego wejścia wejdzie ponownie na stronę wyświetlany jest w paragrafie, czcionką pochyloną, komunikat „Witaj ponownie na stronie lotniska”
<?php if(isset($_COOKIE['start'])){ $msg="<p><i>Witaj ponownie na stronie lotniska</i></p>"; }else{ setcookie('start','start',time()+2*60*60); $msg="<p><b>Dzień dobry! Strona lotniska używa ciasteczek</b></p>"; } ?>
Sesje – Session
Sesje lub inaczej kontrola sesji pozwala na zapamiętanie użytkownika, jego preferencji i upoważnień na stronie np. w przypadku korzystania z koszyka zakupów, mechanizmu logowania itp. Przechodzenie pomiędzy stronami nie skutkuje wówczas koniecznością ponownego logowania się na stronie.
Sesja tworzona jest w postaci unikalnego identyfikatora tzw. SID. Taki identyfikator przechowywany jest w pliku cookie po stronie klienta lub przekazywany za pomocą adresu URL. Zmienne przechowywane są po stronie serwera, a użytkownik ma tylko id sesji.
Wszelkie dane jakie chcemy przekazywać pomiędzy stronami zostają zapisane w tablicy superglobalnej $_SESSION.
Etapy tworzenia sesji
Rozpoczynanie sesji
Tworzenie zmiennych sesyjnych
Praca na zmiennych sesyjnych
Usuwanie zmiennych i niszczenie sesji
Rozpoczynanie sesji
Aby rozpocząć sesję lub móc korzystać z danych z istniejącej sesji, na początku każdego skryptu należy wywołać funkcję:
Tak zadeklarowana zmienna będzie pamiętana tak długo, jak jest to ustawione w pliku php.ini (tą warość można zmieniać ręcznie w pliku),
; After this number of seconds, stored data will be seen as 'garbage' and
; cleaned up by the garbage collection process.
; http://php.net/session.gc-maxlifetime
session.gc_maxlifetime=1440
lub dopóki nie zostanie usunięta ręcznie (jak to zrobić opisałam niżej).
Praca na zmiennych sesyjnych
Zmienne sesyjne stosujemy jak wcześniej omawiane zmienne tablicowe.
Zanim rozpoczniemy używanie zmiennych należy sprawdzić, czy istnieją te zmienne:
<?php
session_start();
$zm_s_1=$_SESSION['zm_sesyjna_1']="Ja";//przypisałam zmienną sesyjną do innej zmiennej - tak też możnaif(isset($zm_s_1)){//sprawdzam czy taka zmienna jest
echo "<pre>";
print_r($_SESSION);
echo "</pre>";}else{
echo "nie ma zmiennych sesyjnych";}?>
Usuwanie zmiennych i niszczenie sesji
W celu usunięcia zmiennej sesyjnej stosujemy:
unset($_SESSION[’zm_sesyjna_1′]);
lub
unset($zm_s_1);
Gdy chcemy usunąć wszystkie zmienne na raz:
$_SESSION=array();
czyli po prostu nadpisujemy istniejącą tablicę – nową pustą tablicą.
Jeżeli sesja nie jest już potrzebna, np. klient wyloguje się z aplikacji, możemy zniszczyć sesję:
session_destroy();
Podczas pracy z sesjami należy pamiętać, że rekord sesji nie jest tworzony, dopóki zmienna nie zostanie zarejestrowana przy użyciu funkcji session_register() lub przez dodanie nowego klucza do tablicy superglobalnej $_SESSION. Dzieje się tak niezależnie od tego, czy sesja została uruchomiona przy użyciu funkcji session_start().