Často potřebujeme do cookies uložit větší objem informací, nicméně maximální limit pro cookies je 4 kB, což není moc. Sessions tento problém řeší ukládáním dat na webový server a do prohlížeče klienta uloží jen krátký identifikátor, podle kterého pozná, jaká data patří jakému klientovi.
Před jakoukoli práci se sessions, je musíme nejprve nastartovat. To se dělá zavoláním funkce session_start() hned na začátku scriptu:
session_start();
Důrazné varování: Před zavoláním funkce
session_start()nesmí proběhnout žádný výstup do HTML kódu!
Obsah sessions je uložen na serveru a do prohlížeče klienta se odesílá jen identifikátor, proto uživatel nemůže žádným způsobem zjistit, co je v sessions uloženo. Jediný způsob, kterým může script ovlivnit, je smazání identifikátoru (načež mu script vygeneruje nový).
Všechny session jsou uloženy v superglobální proměnné $_SESSION a lze je procházet jako pole.
Například jméno aktuálně přihlášeného uživatele můžeme získat zápisem:
echo $_SESSION['user'];
Pozor: Session nemusí vždy existovat (například pokud jde o nově přicházejícího uživatele). Před jakýmkoli výpisem bychom tedy měli vždy zkontrolovat existenci a případně nabídnout alternativní chybové hlášení.
if (isset($_SESSION['user']) && $_SESSION['user']) {echo 'Přihlášený uživatel: ' . $_SESSION['user'];} else {echo 'Nikdo není přihlášený.';}
Ukládání se provádí jako prosté uložení dat do proměnné:
$_SESSION['user'] = 'Honzík';
O technické zajištění korektního uložení na server a odeslání identifikátoru uživateli se již postará webový server.
Jednotlivé hodnoty můžeme mazat samostatně podle klíče:
unset($_SESSION['user']);
Nebo případně všechny dostupné sessions:
unset($_SESSION);
Pozor: Smazání konkrétní session nezpůsobí vyprázdnění hodnoty klíče, ale klíč kompletně smaže. Při pokusu o čtení neexistujícího klíče bude tedy vyhozeno chybové varování. Existenci klíče můžeme vždy snadno ověřit funkcí
isset().
Každá uložená session má omezenou platnost, po jakou dobu bude uložena na serveru. PHP přímo v sobě obsahuje cron script, který staré sessions periodicky promazává.
Výchozí hodnota je obvykle 1440 sekund, což je 24 minut.
Navýšení hodnoty je potřeba provést na 2 místech:
php.ini se nastavuje maximální délka platnosti, kterou server udrží. Hodnotu nastavuje direktiva session.gc_maxlifetime,Použití v PHP:
// server nyní bude držet session s platností až 3600 sekund = 1 hodinaini_set('session.gc_maxlifetime', '3600');// všem klientům (prohlížečům) bude// odeslána session s platností přesně 3600 sekundsession_set_cookie_params(3600);session_start(); // můžeme nastartovat session!
Jan Barášek Více o autorovi
Autor článku pracuje jako seniorní vývojář a software architekt v Praze. Navrhuje a spravuje velké webové aplikace, které znáte a používáte. Od roku 2009 nabral bohaté zkušenosti, které tímto webem předává dál.
Rád vám pomůžu:
Články a novinky nejen ze světa PHP a programování. Nenechte si ujít jediný článek.
Články píše Jan Barášek © 2009-2025 | Kontakt | Mapa webu
Status | Aktualizováno: ... | cs