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;
}
}
}