Určitě jste se setkali s tím, že po prvním přihlášení (registraci) na nějaké stránce (chatu, obchodu, bance apod.) jste při dalším otevření této stránky nemuseli znovu například psát jméno, mail nebo jiné údaje, nebo měnit různá nastavení. Autoři stránek často využívají malé textové soubory, které ukládají na váš disk, a do kterých si právě zapisují některá data, potřebná například pro vaši identifikaci. Těmto souborům se říká cookies, při dalším otevření stránky, která je na váš disk uložila, je prohlížeč odešle webovému serveru. Pravděpodobně jste už také narazili na složku, do které jsou obvykle cookies ukládána a kde si je můžete prohlížet nebo také třeba smazat. Zrovna tak lze cookies smazat nebo jejich používání vypnout v nabídkách prohlížečů, i když k tomu sáhne spíš menší procento uživatelů. Cookies také často (i když většinou nezaslouženě) identifikují různé programy na odhalování spywerů, adwarů a podobné havěti jako potenciální nebezpečí pro váš drahý počítač.

Cookies

Pro vytvoření nebo uložení cookies slouží funkce setcookie, která musí být použita před odesláním hlaviček http, úplně na začátku stránky. Tato funkce může mít více parametrů, povinný parametr je jméno (pokud použijete ve funkci právě jen jméno, dojde ke smazání cookies), další je hodnota (kvůli té se vůbec cookies používají) a běžně se ještě používá doba platnosti (doba, během které se bude dané cookies používat), například:
SetCookie ("pocitadlo", $hodnota, time()+31536000);
Tímto příkazem bude vytvořeno cookies s názvem pocitadlo, do něj uložena hodnota proměnné $hodnota. Pro dobu platnosti je použita PHP funkce time(), která udává aktuální čas (dobu v sekundách od 1.1.1970). K aktuálnímu času je připočtena hromada sekund vzniklá ze součinu 365*24*60*60, neboli toto cookies bude platné jeden rok. (Místo této relativní doby platnosti je možné uvádět i konkrétní datum.)
Hodnoty všech cookies jsou uložené v poli $_COOKIE, z něj je můžeme získat stejným způsobem jako z polí $_POST, $_GET, $_REQUEST nebo $_SERVER (víte kdy a k čemu jsme je používali?), například:
$pocitadlo=$_COOKIE['pocitadlo'];


V 11. lekci jsme tvořili jednoduché počítadlo přístupů na stránku, nyní s pomocí cookies vytvoříme jiné počítadlo - počtu přístupů jednoho uživatele na naši stránku.

Počítadlo přístupů uživatele

Tentokrát uvádím celý zdroj, aby bylo vidět, že část kódu s vytvořením cookies je uvedena ještě před hlavičkou stránky! Počitadlo je trochu vylepšené o to, aby nepočítalo úplně každé obnovení stránky - je možné určit časový interval, během kterého nebudou obnovení započítávána (ve scriptu je uvedeno 60 sekund).
Do cookies ukládáme dva údaje - počet návštěv a dobu pro nezapočítání obnovení stránky. Tyto dva údaje jsou uložené do minipole proměnných $pocitadlo[0] a $pocitadlo[1], potom jsou podobným způsobem jako například výsledky ankety ve 12. lekci převedené do řetězce s rozdělovacím znakem # a tento řetězec je uložený do cookies. Takže je v proměnné $pocitadlo chvíli řetězec a potom pole, ale na rozdíl od jiných jazyků to v PHP nevadí.

<?php
$akt_cas=time(); //do proměnné si uložíme čas načtení stránky
If (isset($_COOKIE['pocitadlo'])): //jestliže už cookies existuje
$pocitadlo=$_COOKIE['pocitadlo']; //ulož jeho hodnotu do proměnné $pocitadlo (nyní ještě řetězec)
$pocitadlo = Explode("#", $pocitadlo); //převeď řetězec $pocitadlo do pole
If ($pocitadlo[1] <= $akt_cas): //už je po časovém limitu
$pocitadlo[0]++; //zvětši o 1
$pocitadlo[1] = $akt_cas+60; //znovu nastav limit pro nezapočítání obnovení
$xx = Implode($pocitadlo, "#"); //z pole vytvoř řetězec
SetCookie ("pocitadlo", $xx, time()+31536000); //ulož cookies, název pocitadlo, hodnota řetězec $xx, doba platnosti je odteď jeden rok
endif;
else: //cookies neexistuje - vytvoř nové
$pocitadlo[0]=1;
$pocitadlo[1] = $akt_cas+60;
$xx = Implode($pocitadlo, "#");
SetCookie ("pocitadlo", $xx, time()+31536000);
endif;
?>

<html>
<head>
<title>Čítač</title>
</head>
<body>
<?php
If ($pocitadlo[0] == 1):
echo "Na našem serveru jste poprvé. Vítejte.";
else:
echo "Náš server jste navštívil(a) již ".$pocitadlo[0]." krát. Děkujeme.";
endif;
?>
</body>
</html>


Úkoly:

Úkol (2 body+prémie)

Přidej na některou svou stránku počitadlo přístupů uživatele (např. na index pod předešlé počitadlo). Prémiové body můžeš získat za stylovou úpravu.

Úkol (body podle užitečnosti a zpracování zdroje, minimálně 4 body)

Najdi na internetu další ukázku využití cookies, uprav ji pro PHP5 a dostatečně okomentuj (především doposud neprobírané příkazy). Nezapomeň uvést zdroj.

Název školy:Základní škola, Hradec Králové, M. Horákové 258
Název projektu:EU peníze školám
Číslo projektu:CZ.1.07/1.4.00/21.2575
Téma:Programování v PHP
Název:VY_32_INOVACE_14_10A_PHP14
Autor:Pavel Petr
Použité zdroje: Není-li uvedeno jinak, jsou všechny ilustrační obrázky dílem autora.