Pri bezstavovom protokole HTTP nemá programátor žiadny nástroj s ktorým by mohol zisťovať či požiadavky užívateľa pochádzajú od tej istej osoby. Na riešenie tohoto problému existuje SESSION.
Protokol HTTP je bezstavová technológia, tzn. že samotný protokol nemá žiadne prostriedky ktoré by dokázali zachovávať stavy medzi jednotlivými prechodmi medzi stránkami kde by sme vedeli či požiadavka pochádza od toho istého užívateľa.
Hlavný rozdiel medzi COOKIEs a SESSION je ten, že COOKIES sa ukladajú u klienta a SESSION na webovom serveri. To čo je ukladané u klienta (COOKIEs) je vo svojej podstate potenciálne nebezpečné. U údajov ukladaných u užívateľa platí, že to čo prehliadač prijme môže byť uložené, zmenené a poslané naspať. Tento fakt môže spôsobiť nemalé problémy hlavne tam kde používame COOKIEs namiesto SESSION. Preto si treba uvedomiť kde a kedy použiť SESSION alebo COOKIES.
Ako funguje SESSION?
SESSION k svojmu správnemu fungovaniu využíva COOKIEs. Samotná relácia je riadená priradeným popisovačom čo je vlastne PHP ID (zašifrované náhodné číslo ktoré je uložené u klienta ako COOKIEs), to odkazuje na SESSION uložené na serveri.
Prácu s reláciami by sme mohli rozdeliť do týchto fáz:
- Zahájime reláciu: Pod týmto pojmom rozumieme to, že musíme dať serveru (na ktorom stránka beží) vedie´t že ideme použiť SESSION. Zahájime ho funkciou session_start(); na začiatku nášho scriptu.
session_start();Môžeme tiež v PHP.INI zapnúť direktívu SESSION.AUTO_START ktorá zabezpečí, že relácia bude automaticky spustená po prístupe na stránku. - Registrácia session: Nebudeme sa zaoberať zastaralými spôsobmi ako $HTTP_SESSION_VARS či nutnosť session_register() ale použijeme klasický spôsob $_SESSION.Pre vytvorenie jednoduchého SESSION to môžeme urobiť napríklad takto (na začiatku skriptu je session_start())
$_SESSION['premenna'] = 12345;Týmto vytvoríme premennú relácie s hodnotou 12345. Premenná relácie bude platná pokým: - Nevyprší doba platnosti podľa nastavenia servera na ktorom stránka bežíNeukončíme reláciu manuálne keď ju už nebudeme potrebovať (napríklad odhlásenie užívateľa)
- Zničenie SESSION: Doba platnosti SESSION býva často dlhšia ako je na prácu s reláciou nutné a preto si ukážeme ako ju ukončíme manuálne. Keď vieme, že už SESSION nepotrebujeme použijeme na odstránenie premennej funkciu unset(), napríklad:
unset($_SESSION['premenna']);Následne by sme mali použiť funkciu session_destroy() ktorá úplne odstráni ID relácie a tým aj celú reláciu zo servera.session_destroy();
Testovanie existencie SESSION
Pri práci so SESSION budete skôr či neskôr potrebovať overiť existenciu relácie (napríklad overenie či užívateľ je prihlásený). Na overenie existencie premennej SESSION môžeme použiť funkcie isset() alebo empty().
if(isset($_SESSION['premenna']))
echo'existuje session';
else echo'neexistuje session';
if(!empty($_SESSION['premenna']))
echo'existuje session';
else echo'neexistuje session';
Konkrétny príklad funkčnosti
Teraz si ukážeme konkrétny príklad ako pracovať s reláciami. Vytvoríme si tri php súbory na ktorých si demonštrujeme vytvorenie, zobrazenie a odstránenie SESSION.
V súbore stranka1.php vytvoríme reláciu spolu s odkazom na ďalší súbor kde SESSION znova zobrazíme.
session_start(); //zahájime session
//vytvoríme session
$_SESSION['moje_session'] = 'Toto je moje SESSION';
//odkaz na ďalší súbor
echo’<a href=”stranka2.php”>stranka2.php</a>’; V tomto súbore zobrazíme už vytvorené SESSION a v súbore stranka3.php ho zobrazíme a zničíme kde uvidíme, že už nebude ďalej existovať.
session_start(); //zahájime session
//zobrazíme session
echo'Moje SESSION obsahuje text: '.$_SESSION['moje_session'];
//odkaz na ďalší súbor
echo’<a href=”stranka3.php”>stranka3.php</a>’; V súbore stranka3.php SESSION zobrazíme, zničíme a pokúsime sa ho znova zobraziť aj keď už nebude existovať.
session_start(); //zahájime session
//zobrazíme session
echo'Moje SESSION obsahuje text: '.$_SESSION['moje_session'];
//zničíme session
unset($_SESSION['moje_session']);
session_destroy();
/* session už neexistuje a to si môže me ukázať ak ho dáme zobraziť SESSION TU UŽ NEEXISTUJE! */
echo’Moje SESSION obsahuje text: ‘.$_SESSION['moje_session']; V tomto článku sme si ukázali základy práce so SESSION. Treba si ale uvedomiť, že aj keď sú SESSION ukladané na serveri treba dbať na bezpečnosť a preto NIKDY nepoužívajte ako identifikátor relácie alebo jeho hodnotu svoj nick či prípadne heslo (pri overovaní totožnosti užívateľa). Ak ho musíte použiť tak určite v zaheshovanej podobe ktorá bz pri nejakom odcudzení do rúk hackera nepodávala žiadnu informáciu ktorú by hacker mohol zneužiť.

velmi pekne dakujem za vysvetlenie session, velmi jednoducho a polopatisticky si to napisal. tesim sa na dalsie clanky
Fero