7200)) { logout(); return false; } $_SESSION['wpc_last_activity'] = time(); return true; } return false; } /** * Blokkeert ongeautoriseerde toegang en stuurt door naar het inlogscherm. */ function require_auth() { if (!is_logged_in()) { // Als het een asynchrone AJAX aanroep is, geef HTTP 401 Unauthorized if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) || isset($_GET['action']) || isset($_GET['api'])) { header('HTTP/1.1 401 Unauthorized'); header('Content-Type: application/json; charset=utf-8'); echo json_encode(['status' => 'unauthorized', 'message' => 'Sessie verlopen of niet ingelogd.']); exit; } $redirect = urlencode($_SERVER['REQUEST_URI'] ?? 'index.php'); header("Location: login.php?redirect={$redirect}"); exit; } } /** * Genereert een CSRF token voor formulieren. */ function get_csrf_token() { if (empty($_SESSION['wpc_csrf'])) { $_SESSION['wpc_csrf'] = bin2hex(random_bytes(32)); } return $_SESSION['wpc_csrf']; } /** * Valideert het ingediende CSRF token. */ function verify_csrf_token($token) { if (empty($_SESSION['wpc_csrf']) || empty($token)) { return false; } return hash_equals($_SESSION['wpc_csrf'], $token); } /** * Beëindigt de sessie en ruimt cookies op. */ function logout() { $_SESSION = []; if (ini_get("session.use_cookies")) { $params = session_get_cookie_params(); setcookie(session_name(), '', time() - 42000, $params["path"], $params["domain"], $params["secure"], $params["httponly"] ); } @session_destroy(); }