Refactor code structure for improved readability and maintainability

This commit is contained in:
2026-09-09 16:30:11 +02:00
parent 4cb94d3897
commit 64a7a3bcf0
7 changed files with 235 additions and 133 deletions
+42 -11
View File
@@ -30,15 +30,17 @@ function is_https_request(): bool {
function start_secure_session(): void {
if (session_status() === PHP_SESSION_NONE) {
// Zorg voor een ruime sessieduur (30 dagen)
ini_set('session.gc_maxlifetime', '2592000');
ini_set('session.cookie_lifetime', '2592000');
// Dagsessie: verloopt iedere nacht om 23:59:59 (blijft niet meerdere dagen staan)
$secondsUntilMidnight = max(60, strtotime('today 23:59:59') - time());
ini_set('session.gc_maxlifetime', (string)$secondsUntilMidnight);
ini_set('session.cookie_lifetime', (string)$secondsUntilMidnight);
ini_set('session.use_strict_mode', '1');
ini_set('session.use_only_cookies', '1');
$isSecure = is_https_request();
session_set_cookie_params([
'lifetime' => 30 * 24 * 60 * 60, // 30 dagen
'lifetime' => $secondsUntilMidnight, // Verloopt vannacht om 23:59:59
'path' => '/',
'domain' => '',
'secure' => $isSecure,
@@ -117,12 +119,14 @@ function ensure_theme_column(PDO $db): void {
}
/**
* Genereert en bewaart een persistente 'Onthoud mij' token in MariaDB en plaatst een veilige cookie
* Genereert en bewaart een dagspecifieke login token in MariaDB en plaatst een veilige cookie.
* Verloopt altijd dezelfde nacht om 23:59:59 zodat sessies niet meerdere dagen blijven staan.
*/
function issue_remember_token(int $userId): string {
$rawToken = bin2hex(random_bytes(32));
$tokenHash = hash('sha256', $rawToken);
$expiresAt = date('Y-m-d H:i:s', time() + (30 * 86400)); // 30 dagen geldig
$midnightTs = strtotime('today 23:59:59');
$expiresAt = date('Y-m-d 23:59:59', $midnightTs);
$db = get_db_connection();
ensure_remember_token_columns($db);
@@ -132,7 +136,7 @@ function issue_remember_token(int $userId): string {
$isSecure = is_https_request();
setcookie('fociz_remember', $rawToken, [
'expires' => time() + (30 * 86400),
'expires' => $midnightTs, // Verloopt vannacht om 23:59:59
'path' => '/',
'secure' => $isSecure,
'httponly' => true,
@@ -158,11 +162,33 @@ function clear_remember_cookie(): void {
/**
* Haalt de huidige ingelogde gebruiker op uit de database.
* Herstelt automatisch de sessie als een geldige 'fociz_remember' cookie aanwezig is.
* Garandeert dat de sessie strikt om 23:59:59 gereset wordt en nooit meerdere dagen blijft staan.
*/
function get_logged_in_user(): ?array {
start_secure_session();
$today = date('Y-m-d');
$now = time();
// Controleer of de sessie van een eerdere dag is of voorbij 23:59:59
if (!empty($_SESSION['auth_date']) && $_SESSION['auth_date'] !== $today) {
$_SESSION = [];
clear_remember_cookie();
if (session_status() === PHP_SESSION_ACTIVE) {
@session_regenerate_id(true);
}
return null;
}
if (!empty($_SESSION['session_expires_at']) && $now > (int)$_SESSION['session_expires_at']) {
$_SESSION = [];
clear_remember_cookie();
if (session_status() === PHP_SESSION_ACTIVE) {
@session_regenerate_id(true);
}
return null;
}
$db = get_db_connection();
ensure_remember_token_columns($db);
@@ -172,13 +198,16 @@ function get_logged_in_user(): ?array {
$stmt->execute([$_SESSION['user_id']]);
$user = $stmt->fetch();
if ($user) {
$_SESSION['auth_date'] = $today;
$_SESSION['session_expires_at'] = strtotime('today 23:59:59');
return $user;
}
// Gebruiker bestaat niet meer in database
$_SESSION = [];
clear_remember_cookie();
}
// 2. Controleer persistente 'remember me' cookie (voorkomt ongewenst uitloggen bij refresh of herstart)
// 2. Controleer dagspecifieke cookie (uitsluitend geldig voor vandaag tot 23:59:59)
if (!empty($_COOKIE['fociz_remember'])) {
$rawToken = trim($_COOKIE['fociz_remember']);
$tokenHash = hash('sha256', $rawToken);
@@ -192,14 +221,16 @@ function get_logged_in_user(): ?array {
$user = $stmt->fetch();
if ($user) {
// Herstel volledige PHP sessie
// Herstel PHP sessie voor de huidige werkdag
$_SESSION['user_id'] = $user['id'];
$_SESSION['user_name'] = $user['name'];
$_SESSION['user_email'] = $user['email'];
$_SESSION['user_role'] = $user['role'];
$_SESSION['is_2fa_verified'] = true;
$_SESSION['auth_date'] = $today;
$_SESSION['session_expires_at'] = strtotime('today 23:59:59');
// Verleng direct de geldigheid van de remember token voor nog eens 30 dagen
// Verleng uitsluitend tot 23:59:59 van vandaag
issue_remember_token((int)$user['id']);
return $user;