self::SESSION_LIFETIME) { $_SESSION = []; session_destroy(); View::redirect('/login'); } } public static function login(int $userId): void { if (session_status() === PHP_SESSION_NONE) { session_start(); } session_regenerate_id(true); $_SESSION['user_id'] = $userId; $_SESSION['login_time'] = time(); } public static function logout(): void { if (session_status() === PHP_SESSION_NONE) { session_start(); } $_SESSION = []; if (ini_get('session.use_cookies')) { $p = session_get_cookie_params(); setcookie(session_name(), '', time() - 42000, $p['path'], $p['domain'], $p['secure'], $p['httponly']); } session_destroy(); } public static function userId(): ?int { return isset($_SESSION['user_id']) ? (int)$_SESSION['user_id'] : null; } }