Instalar ahora'); } // Verificar autenticación - redirigir al login si no está logueado if (!isUserLoggedIn()) { // Si es una petición AJAX, devolver JSON if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') { http_response_code(401); header('Content-Type: application/json; charset=utf-8'); echo json_encode([ 'success' => false, 'error' => 'Sesión expirada. Por favor, inicie sesión.', 'redirect' => 'login.php' ]); exit; } // Para páginas normales, redirigir al login header('Location: login.php'); exit('Acceso denegado. Iniciar sesión'); } // Enfermeros solo pueden ver su portal, no el panel admin if (isEnfermero()) { header('Location: enfermero_portal.php'); exit; } // Verificar timeout de sesión (ya se hace en config.php, pero por seguridad) if (isset($_SESSION['last_activity']) && (time() - $_SESSION['last_activity'] > SESSION_TIMEOUT)) { session_destroy(); session_start(); // Si es AJAX if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') { http_response_code(401); header('Content-Type: application/json; charset=utf-8'); echo json_encode([ 'success' => false, 'error' => 'Sesión expirada por inactividad.', 'redirect' => 'login.php' ]); exit; } header('Location: login.php?session_expired=1'); exit; } // Actualizar última actividad $_SESSION['last_activity'] = time(); ?>