Refactor code structure for improved readability and maintainability
This commit is contained in:
+42
-11
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user