[security] Opravena chyba session_regenerate_id po session_destroy při obnově z remember me cookie
This commit is contained in:
+17
-2
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user