Restringir acceso PHP por Días y Horas: Ejemplos completos
Restringir acceso PHP por Días y Horas. Si bien, los sistemas web poseen login para poder acceder al BACKEND del sistema y así poder gestionar el sistema a nuestro antojo. Ahora, para este ejemplo usaremos el lenguaje PHP y MySQL para poder ejecutar nuestro ejemplo.
En este artículo veremos cómo implementar un script capas de bloquear o restringir el acceso en determinados días de la semana y/o restringir el acceso a un determinado rango de horas según el día.
PREGUNTAS Y RESPUESTAS ACERCA DEL SISTEMA A IMPLEMENTAR
A continuación, veremos preguntas y respuestas acerca de este script PHP.
¿Porque implementar este script en nuestros sistemas web?
Hay varias razones por el cual podemos implementar bloqueos de accesos a los sistemas, veamos algunos de ellos:
- Acceso no autorizados de parte del personal en horarios no laborables (día de descanso del personal, vacaciones, etc.).
- Bloquear el acceso al sistema en horarios no laborables. (Por la noche y madrugada).
- Tener más control sobre el acceso del personal al sistema web.
Restringir acceso PHP por Días y Horas
Hace unos meses me han solicitado que agregue una restricción a un sistema para ciertos usuarios y que sólo podrán ingresar algunos días de la semana y horas laborables, a continuación veremos la solución.
¿Cómo funciona el algoritmo?
Desde el panel de control podemos gestionar las horas y días para que el usuario pueda acceder al sistema.
Además, cuando el usuario intente iniciar sesión se validara que restricciones posee y acatara la restricción programada para tal usuario.
Importante: Activar la fecha actual
PHP trabaja de manera predeterminada en la fecha y hora. Por lo tanto, si deseamos trabajar con horas debemos de configurar la zona horaria de nuestro país, si no configuramos puede traernos grandes problemas a la hora de consultar y/o almacenar en la base de datos a largo plazo.
Sin embargo, tenemos opciones para dar solución a estos inconvenientes, simplemente tenemos que establecer la zona horaria de manera correcta de acuerdo a nuestro país de residencia y/o ubicación del sistema.
La función se llama date_default_timezone_set y es muy fácil de configurar, aquí te dejo la lista de países de américa latina.
Para este ejemplo usaremos la zona horaria de la Ciudad de México, y lo debemos de configurar de la siguiente manera en la parte superior de nuestro script.
date_default_timezone_set("America/Mexico_City");
Si deseas más sobre este tema, Aquí te dejo una lista de cómo establecer la zona horaria en diferentes lugares del mundo.
IMPLEMENTACION Y ESTRUCTURA DEL ALGORITMO
En este ejemplo vamos a configurar el acceso al sistema en horario laborables, es decir sus 8 horas de trabajo en la empresa. Por lo tanto, el rango será de las 8am. Hasta las 16pm. (8:00 a 16:00).
Entonces para validar tal rango tenemos que consultar la hora actual de nuestro país usando la función date(“H”). Sin embargo, tenemos que convertir a entero este resultado, aquí el ejemplo de conversión.
$HoraActual = intval(date("H")); // La hora actual del País
Otra forma de realizar la conversión a entero seria el siguiente algoritmo.
$HoraActual = (int)date("G"); // Hora actual en 24 hrs del País
Para terminar le mostraremos el script completo de validación manual y su respectiva condicional:
<?php date_default_timezone_set("America/Mexico_City"); $inicio= 8; # Desde las ocho de la mañana. $fin= 16; # Hasta las 16 horas de la tarde. $HoraActual = intval(date("H"));// Hora actual del Pais de residencia. if ($HoraActual >= $inicio && $HoraActual < $fin) { # Aquí mostrara el acceso permitido al sistema echo "Bienvenido, al sistema"; } else { # Mostrar mensaje de sistema bloqueado, etc. echo "No podemos continuar, consulte con su administrador"; }
Tenemos que tener cuidado con los operadores condicionales del PHP. Por lo tanto, en el ejemplo anterior, comparamos si es menor con la variable “$fin
”. Con esta configuración, permitirá entrar hasta 15:59 pero cuando sean las 16 horas (o un número mayor) ya no dejará pasar y ejecutara el valor falso (ELSE).
Si hubiéramos programado con menor o igual (<=), el rango se habría ampliado hasta las 16:59 horas.
b) Permitir el acceso dependiendo del día de la semana.
A continuación, veremos la validación por días `permitidos para acceder al sistema. Por ejemplo, días permitidos de (Lunes, Martes, Miércoles, Jueves y Viernes), Sábado y domingo no puede acceder al sistema.
Lo que tendríamos que hacer sería consultar el día del mes, y comparar. Casi como en los ejemplos de arriba pero ahora utilizamos date(“w”). El código queda así:
<?php date_default_timezone_set("America/Mexico_City"); $dias = array("do","lu","ma","mi","ju","vi","sa"); $do=0; // Sin acceso $lu=1; // Dia permitido $ma=1; // Dia permitido $mi=1; // Dia permitido $ju=1; // Dia permitido $vi=1; // Dia permitido $sa=1; // Dia permitido $hoy=$dias[date("w")]; // Mostramos dia actual if(($hoy=="do") && ($do==0)){ echo'<div class="alert alert-warning" role="alert"><strong>Importante:</strong> El sistema no puede continuar, Consulte con su Administrador y/o Coordinador.</div>'; if (isset($_SESSION['dayper']['username'])) : session_unset(); session_destroy(); endif; exit(); } elseif(($hoy=="lu") && ($lu==0)){ echo'<div class="alert alert-warning" role="alert"><strong>Importante:</strong> El sistema no puede continuar, Consulte con su Administrador y/o Coordinador.</div>'; if (isset($_SESSION['dayper']['username'])) : session_unset(); session_destroy(); endif; exit(); } elseif(($hoy=="ma") && ($ma==0)){ echo'<div class="alert alert-warning" role="alert"><strong>Importante:</strong> El sistema no puede continuar, Consulte con su Administrador y/o Coordinador.</div>'; if (isset($_SESSION['dayper']['username'])) : session_unset(); session_destroy(); endif; exit(); } elseif(($hoy=="mi") && ($mi==0)){ echo'<div class="alert alert-warning" role="alert"><strong>Importante:</strong> El sistema no puede continuar, Consulte con su Administrador y/o Coordinador.</div>'; if (isset($_SESSION['dayper']['username'])) : session_unset(); session_destroy(); endif; exit(); } elseif(($hoy=="ju") && ($ju==0)){ echo'<div class="alert alert-warning" role="alert"><strong>Importante:</strong> El sistema no puede continuar, Consulte con su Administrador y/o Coordinador.</div>'; if (isset($_SESSION['dayper']['username'])) : session_unset(); session_destroy(); endif; exit(); } elseif(($hoy=="vi") && ($vi==0)){ echo'<div class="alert alert-warning" role="alert"><strong>Importante:</strong> El sistema no puede continuar, Consulte con su Administrador y/o Coordinador.</div>'; if (isset($_SESSION['dayper']['username'])) : session_unset(); session_destroy(); endif; exit(); } elseif(($hoy=="sa") && ($sa==0)){ echo'<div class="alert alert-warning" role="alert"><strong>Importante:</strong> El sistema no puede continuar, Consulte con su Administrador y/o Coordinador.</div>'; if (isset($_SESSION['dayper']['username'])) : session_unset(); session_destroy(); endif; exit(); } else{ echo "Bienvenido";// SI todo es correcto con los dias habilitados } ?>
De esta manera podemos validarlo, donde cero (0) no tendrá acceso al sistema y uno (1) si tendrá acceso al sistema. Recordemos, que podemos traer esos valores de una base de datos para poder programarlo.
Otro ejemplo usando algo similar «date(«w»)».
Si deseamos que un personal solo pueda acceder los domingos, o un día de la semana (sin importar el número del día) podemos usar date(“w”) que devuelve un número del 0 al 6, el 0 es domingo y el 6 es sábado, veamos un ejemplo.
<?php $lunes = 1; $dia_actual = intval(date("w")); #Convertir en entero para evitar errores if ($dia_actual === $lunes) { # Mostrar acceso permitido echo "Bienvenido, visitante"; } else { # Mostrar acceso denegado echo "No se permite acceso en este dia"; }
Conclusión
Ya tenemos una idea de cómo manejar los días y horas y con algunas modificaciones en el algoritmo podemos permitir acceso al sistema en muchos días, meses o años, todo depende de nuestra imaginación.
La idea es aprender la secuencia de comparaciones con el día y hora actual para trabajar sin problemas con días y horas en PHP, todo depende como realicemos las condiciones (IF ELSE). Por lo tanto, con la función date podemos mostrar en tiempo real el año, mes, día, segundos, día del año (hasta 365) y mucho más aspectos más para poder condicionarlos correctamente.
Espero que esta breve explicación les sirva muy bien, gracias por su visita y no se olviden ante cualquier duda, solo comenten en la caja de comentarios. Estaré gustoso de responderles.
Gracias por la colaboración es muy clara y concisa. Tengo una consulta aldicional, como sería el formato de ingresar la hora cuando el rango es desde las 8:30 por ejemplo, muy amable por la respuesta