PHP Manual
/
HTTP

Relácie - súbory cookie servera v jazyku PHP

06. 11. 2019

Obsah článku

Často potrebujeme uložiť viac informácií do cookies, ale maximálny limit pre cookies je 4 kB, čo nie je veľa. Relácie tento problém riešia tak, že údaje ukladajú na webovom serveri a v prehliadači klienta ukladajú len krátky identifikátor, ktorý určuje, ktoré údaje patria ktorému klientovi.

Spustenie relácie

Predtým, ako začneme pracovať s reláciami, musíme ich najprv začať. To sa vykoná zavolaním funkcie session_start() hneď na začiatku skriptu:

session_start();

Dôrazné upozornenie: pred volaním funkcie session_start() sa nesmie vykonať žiadny výstup do HTML kódu!

Zabezpečenie relácie

Obsah relácie je uložený na serveri a do klientskeho prehliadača sa posiela iba identifikátor, takže používateľ nemá možnosť zistiť, čo je v relácii uložené. Jediný spôsob, ako môže skript ovplyvniť používateľa, je vymazanie identifikátora (po ktorom skript vygeneruje nový).

Získavanie údajov z relácie

Všetky relácie sú uložené v superglobálnej premennej $_SESSION a možno ich prechádzať ako pole.

Napríklad meno aktuálne prihláseného používateľa možno získať zápisom:

echo $_SESSION['používateľ'];

Poznámka: Relácia nemusí vždy existovať (napríklad ak ste nový používateľ). Preto by sme mali vždy pred každým výpisom skontrolovať, či existuje, a v prípade potreby ponúknuť alternatívne chybové hlásenie.

if (isset($_SESSION['používateľ']) && $_SESSION['používateľ']) {
echo 'Prihlásený používateľ:' . $_SESSION['používateľ'];
} else {
echo 'Nikto nie je prihlásený.';
}

Ukladanie údajov do relácie

Ukladanie sa vykonáva ako jednoduché uloženie údajov do premennej:

$_SESSION['používateľ'] = 'Honzik';

Webový server sa postará o technické zabezpečenie správneho uloženia na serveri a odoslanie identifikátora používateľovi.

Odstránenie relácií

Jednotlivé hodnoty možno vymazať samostatne podľa kľúča:

unset($_SESSION['používateľ']);

Prípadne všetky dostupné relácie:

unset($_SESSION);

Poznámka: Odstránením konkrétnej relácie sa nevyprázdni hodnota kľúča, ale kľúč sa úplne odstráni. Preto sa pri pokuse o načítanie neexistujúceho kľúča vyhodí varovanie o chybe. Existenciu kľúča môžeme vždy ľahko overiť pomocou funkcie isset().

Maximálna platnosť relácie

Každá uložená relácia má limit, ako dlho bude uložená na serveri. PHP priamo obsahuje skript cron, ktorý pravidelne odstraňuje staré relácie.

Predvolená hodnota je zvyčajne 1440 sekúnd, čo je 24 minút.

Zvýšenie hodnoty je potrebné vykonať na 2 miestach:

Použitie v PHP:

// server teraz udrží reláciu až 3600 sekúnd = 1 hodina
ini_set('session.gc_maxlifetime', '3600');
// všetci klienti (prehliadače) budú
// relácia odoslaná s platnosťou presne 3600 sekúnd
session_set_cookie_params(3600);
session_start(); // môžeme začať reláciu!

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:

Související články

1.
5.
Status:
All systems normal.
2024