From 2e4c10d08498a39b5c8bd6a40c2ff3ab2dd290a4 Mon Sep 17 00:00:00 2001 From: stepan Date: Thu, 19 Mar 2026 09:36:41 +0100 Subject: [PATCH] =?UTF-8?q?[security]=20Opravena=20chyba=20session=5Fregen?= =?UTF-8?q?erate=5Fid=20po=20session=5Fdestroy=20p=C5=99i=20obnov=C4=9B=20?= =?UTF-8?q?z=20remember=20me=20cookie?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- auth/auth.php | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) 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);