File "SessionHandler.php"

Full Path: C:/wamp64/www/Asistencia_Capacitacion/Controladores/Core/SessionHandler.php
File size: 2.27 KB
MIME-type: text/x-php
Charset: utf-8

<?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 = 1800; // 30 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;
        }
    }
}