Ciastka
Ciasteczka, w przeciwieństwie do zmiennych z superglobalnych tablic $_GET i $_POST potrafią przechowywać określone informacje przez określony czas, nawet po wyłączeniu przeglądarki z wyjątkiem usunięcia przeglądarki.
Cały kod do wysyłania ciasteczka musimy umieścić bezpośrednio przed kodem, który trafiłby do przeglądarki wcześniej, czyli najlepiej na początku samego pliku, w przeciwnym wypadku zostaniemy pochwaleni informacją:
Warning: Cannot modify header information - headers already sent by (output started at d:\usr\apache\httdocs\html\index.php:1) in d:\usr\apache\htdocs\html\index.php on line 2
Wysyłanie coockies - setcookie()
Do wysyłania ciasteczek służy funkcja setcookie (ang. ustaw ciastko), która ma dwa atrybuty, aczkolwiek można stosować i trzeci, ale narazie tego nie zastosujemy. Pierwszy argument przechowuje nazwę ciasteczka, a drugi jego zawartość:
<?php
setcookie("nazwa","zawartość");
?>
<HTML>
Uwaga: znacznik HTML pojawił się tam celowo, (chociaż powinien to być DOCTYPE), aby od razu uświadomić sobie, że kody ciasteczek, jak i inne informacje wysyłane w tzw. nagłówku muszą być przed wszystkimi innymi kodami, które trafiają do przeglądarki. Oczywiście za jednym zamachem możemy wysłać inne ciasteczka, albo zadeklarować zmienną – to nie trafia do przeglądarki np.:
<?php
$zmienna = "Tekst";
setcookie("nazwa","zawartosć");
setcookie("nazwa2","zawartosć2");
?>
Jeżeli zastosowaliśmy oby dwa kody na naszym serwerze w naszej przeglądarce powinny być zapisane ciastka o nazwach nazwa i nazwa2.
Uwaga: przy próbie wysłania ciasteczka o takiej samej nazwie ciastko jest zamieniane.
Uwaga: niektóre przeglądarki, albo ich konkretne ustawienia nie akceptują ciasteczek.
Odczytywanie ciasteczek
Przyjmuję, że ciastko zostało pomyślnie wysłane i, że przeglądarka go nie zjadła. Warto teraz odczytać jego zawartość. Informacje zapisane w ciasteczkach odczytujemy używając superglobalnej tablicy $_COOKIE, której wartością jest nazwa ciastka. Przykładowy kod np.:
<?php
echo "$_COOKIE[nazwa]";
?>
Uwaga: oczywiście powyższy kod nie musi znajdować się ponad wszystkim, tak jak kod wysyłający ciasteczka, który musiał znaleźć się przed innymi tagami wysyłanymi do przeglądarki.
Uwaga: jeżeli w jednym skrypcie ciastko jest wysyłane i odczytywane, pamiętajmy, że dopiero po odświeżeniu ujrzymy zawartość ciastka!
Aby odnaleźć się w czasie i przestrzeni - time()
Niektóre ciastka, przechowujące loginy, hasła, czy inne poufne informacje powinny mieć z góry określony czas ważności ciasteczka. Zanim jednak dojdziemy do tego, poznajmy kolejną funkcję - time(), której zadaniem jest zwrócenie aktualnego uniksowego znacznika czasu, dokładniej od pierwszej sekundy roku 1970. Możemy użyć prostego skryptu, aby dowiedzieć się, ile sekund temu był ten dzień:
<?php
echo time();
?>
Można łatwo sprawdzić, ile lat temu był ten dzień za pomocą zdolności kalkulacyjnych PHP:
<?php
$czas = time() / 3600 / 24 / 366;
$czas = round($czas);
echo $czas;
?>
Pewnie uważasz, po co ja o tym mówię? Po co Ci funkcja wyświetlająca prehistoryczny czas. Jest potrzebna, gdyż wartość ciasteczek określa się w sekundach liczonych właśnie od tej daty. Oto przykład ciastka, które jest ważne przez cały dzień (dobra to 86400 sekund):
<?php
setcookie("krnazwa","zawartosć",time() + 86400);
?>
Powinniśmy wiedzieć, że PHP pozwala na wykonywanie operacji praktycznie wszędzie, więc bardziej przejrzysty kod może wyglądać nawet tak:
<?php
setcookie("krnazwa","zawartosć",time() + 60 * 60 * 24);
?>
Oto prosty skrypt, pozwalający na wprowadzenie własnego imienia:
<?php
if ($_POST[imie] == TRUE) {
setcookie("imie",$_POST[imie]);
echo "Zostałeś zapamiętany,
<A HREF=\"index.php\">kliknij tutaj</A>";
}
else if ($_COOKIE[imie] == TRUE) {
echo "Witaj <B>$_COOKIE[imie]"; }
else { echo "
<FORM ACTION=\"index.php\" METHOD=\"post\">
Podaj swoje imię: <INPUT TYPE=\"text\" NAME=\"imie\"><br />
<INPUT TYPE=\"submit\" VALUE=\"Zapamiętaj mnie\">
</FORM>"; }
?>
Offline