Ondřej Šteigl - Logo ONDŘEJ ŠTEIGL
PHP

Přihlášení v PHP: hesla, session a chráněné stránky

Bezpečné ověření hesla, paměť přihlášeného uživatele a stránka jen pro přihlášené – základ každé administrace.

Čtení 9 min začátečník Naposledy upraveno 2. 11. 2026

Předtím: Jak z PHP pracovat s databází (bezpečně)

Většina webů má místo, které je jen pro přihlášené: administraci, účet zákazníka nebo členskou sekci. Přihlášení v PHP má tři kroky: ověřit heslo, zapamatovat si uživatele v session a na chráněných stránkách kontrolovat, zda je přihlášen.

Hesla se neukládají jako text

Heslo nikdy neukládejte do databáze tak, jak ho uživatel napsal. Použijte jednosměrný otisk: při registraci funkci password_hash a při přihlášení funkci password_verify.

// při registraci
$hash = password_hash($heslo, PASSWORD_DEFAULT);
// $hash uložte do sloupce hesla

// při přihlášení
if (password_verify($zadaneHeslo, $ulozenyHash)) {
  echo "Heslo sedí.";
}

Funkce password_verify porovná zadané heslo s otiskem. Původní text se tak nedá zjistit ani z databáze. Pro sloupec s otiskem je vhodná délka VARCHAR(255).

Session: paměť mezi stránkami

HTTP je bezstavový, takže každá stránka je nová. Session umožňuje serveru poznat stejného návštěvníka při dalším kliknutí. Spustí se funkcí session_start(), která musí být na úplném začátku skriptu, před jakýmkoli výstupem:

<?php
session_start();
// ... zbytek stránky ...

Přihlášení: uložení do session

<?php
session_start();
// $uzivatel = řádek z tabulky podle e-mailu (viz návod o databázi)
if ($uzivatel && password_verify($heslo, $uzivatel['heslo'])) {
  session_regenerate_id(true);   // nové ID proti zneužití staré session
  $_SESSION['uzivatel_id'] = $uzivatel['id'];
  header('Location: /administrace.php');
  exit;
}

Funkce session_regenerate_id(true) při každém přihlášení vytvoří nové ID session. Do $_SESSION ukládáme jen to nejnutnější, tedy identifikátor uživatele.

Kontrola na chráněné stránce

<?php
session_start();
if (!isset($_SESSION['uzivatel_id'])) {
  header('Location: /prihlaseni.php');
  exit;
}
// ... obsah jen pro přihlášené ...

Důležité je exit za přesměrováním. Přesměrování samo o sobě skript nezastaví, takže bez exit by se citlivá část kódu dál provedla.

Odhlášení

<?php
session_start();
$_SESSION = [];
session_destroy();
header('Location: /');
exit;
💡 Tip: Přihlašovací formulář odesílejte metodou POST, nikdy ne v adrese. Heslo v URL by zůstalo v historii prohlížeče i v logu serveru.

Časté chyby

Teď umíte udělat přihlášení, které hesla bezpečně ověří, a stránky, které uvidí jen přihlášený návštěvník. Na tomhle stavíte administraci webu. 👍

Všechny návody

Nechcete web řešit sami a chcete ho mít hotový a profesionální?

Podívejte se na tvorbu webů →

© Ondřej Šteigl. Návody vznikají ve spolupráci s Claude (AI) a jsou upravovány autorem. Autorská práva k vlastním úpravám a příkladům náleží Ondřeji Šteiglovi. Kopírování nebo šíření celých textů bez písemného souhlasu je zakázáno. Výukové použití je vítáno, uveďte prosím zdroj (osteigl.cz).

← Zpět na všechny návody

Nezmeškejte nový návod

Když vyjde nový návod, pošleme vám krátký e-mail. Žádný spam, odhlásit se jde jedním klikem.

QR platba – dobrovolný příspěvek

☕ Byl návod užitečný?

Můžete mě podpořit dobrovolným příspěvkem – nepovinně, třeba stovkou na provoz a na kafe. Načtěte QR v bankovní aplikaci, nebo pošlete na účet 6048546800/6363. Díky!