<?php // File: Controladores/Core/SessionHandler.php function check_session_timeout() { // Solo iniciar sesión si no está ya iniciada if (session_status() === PHP_SESSION_NONE) { session_start(); } // Rutas dinámicas para redirección (necesario si tu app no está en la raíz del dominio) $base_url = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http") . "://$_SERVER[HTTP_HOST]"; $root_dir = str_replace('\\', '/', dirname($_SERVER['SCRIPT_NAME'])); if ($root_dir == '/') { $root_dir = ''; } // Definimos BASE_URL para usarlo en redirecciones (como en LoginController::logout) if (!defined('BASE_URL')) { define('BASE_URL', $base_url . $root_dir); } $inactivity_timeout = 180; // 3 minutos $is_login_url = (isset($_GET['url']) && (strpos($_GET['url'], 'login') === 0)); // Si el usuario no está logueado y no está en la página de login, redirigir if (!isset($_SESSION['logged_in']) || $_SESSION['logged_in'] !== true) { if (!$is_login_url) { session_unset(); session_destroy(); // Redirigir al controlador de login header('Location: ' . BASE_URL . '/index.php?url=login/index'); exit; } } else { // Lógica de verificación de inactividad if (isset($_SESSION['last_activity']) && (time() - $_SESSION['last_activity'] > $inactivity_timeout)) { session_unset(); session_destroy(); header('Location: ' . BASE_URL . '/index.php?url=login/index&timeout=1'); exit; } // Lógica de actualización y regeneración de sesión $_SESSION['last_activity'] = time(); if (!isset($_SESSION['regenerated_time']) || (time() - $_SESSION['regenerated_time'] > 300)) { session_regenerate_id(true); $_SESSION['regenerated_time'] = time(); } // Verificar datos mínimos if (!isset($_SESSION['user']) || !isset($_SESSION['grado'])) { session_unset(); session_destroy(); header('Location: ' . BASE_URL . '/index.php?url=login/index&error=session_corrupted'); exit; } } }