diff --git a/auth/auth.php b/auth/auth.php index fc629c3..8b483e7 100644 --- a/auth/auth.php +++ b/auth/auth.php @@ -94,7 +94,9 @@ if (isset($_SESSION['uzivatel_id']) && isset($_SESSION['email'])) { if (isset($_SESSION['posledni_aktivita']) && (time() - $_SESSION['posledni_aktivita']) > SESSION_EXPIRACE) { - // Session vypršela – zrušíme ji + // Session vypršela – zrušíme ji. + // DŮLEŽITÉ: Po session_destroy() není žádná aktivní session. + // Krok 2 (remember me) to musí zohlednit – viz níže. $_SESSION = []; session_destroy(); @@ -164,7 +166,20 @@ if (!$auth_prihlasen && if ($cookie_ok) { - // Cookie je platná – obnovíme session + // Cookie je platná – obnovíme session. + // + // OPRAVA CHYBY: Pokud v kroku 1 vypršela session a byla zničena + // přes session_destroy(), není nyní žádná aktivní session. + // session_regenerate_id() by selhalo s warningem "no active session", + // ten warning by odeslal výstup, a tím by znemožnil setcookie() + // a header() níže. + // + // Řešení: pokud session není aktivní, spustíme ji znovu + // před voláním session_regenerate_id(). + if (session_status() !== PHP_SESSION_ACTIVE) { + session_start(); + } + // Regenerujeme session ID (ochrana před session fixation) session_regenerate_id(true);