Č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:
Nabízím trénink vývojářů, konzultace, školení a analýzu návrhových vzorů. Osobně v Praze nebo online.
Napište mi, pokud si nevíte rady.
Lektor: Jan Barášek
Články píše Jan Barášek © 2009-2024 | Kontakt | Mapa webu
Status | Aktualizováno: ... | cs