PHP Manual
/
HTTP

Sessions - serverové cookies v PHP

06. 11. 2019

Obsah článku

Č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.

Nastartování sessions

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!

Bezpečnost sessions

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ý).

Získání dat ze session

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ý.';
}

Uložení dat do session

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.

Smazání sessions

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().

Maximální délka platnosti session

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:

  • V php.ini se nastavuje maximální délka platnosti, kterou server udrží. Hodnotu nastavuje direktiva session.gc_maxlifetime,
  • Na straně PHP scriptu je potřeba uvést aktuální požadovanou platnost.

Použití v PHP:

// server nyní bude držet session s platností až 3600 sekund = 1 hodina
ini_set('session.gc_maxlifetime', '3600');
// všem klientům (prohlížečům) bude
// odeslána session s platností přesně 3600 sekund
session_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:

Související články

1.
5.

Potřebujete poradit s PHP?

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

Status:
All systems normal.
2024