Buenas, ando probando este tema de las sesiones en PHP y me quede en un punto.
Hasta ahora logré crearlas y que su fin se concrete (evitar el acceso a secciones restringidas sin previa identificación). El tema es que se me ocurrió armar al script para que expire la sesión pasados 5 minutos de inactividad. Y realmente no lo estoy pudiendo conseguir.
A continuación dejo los códigos explicando qué quise hacer.
- check.php:
Código PHP:
<?php
session_start();
/* conexiona a la bd blablablabla*/
if (mysql_num_rows($resultado) <> 1){
echo "Usuario o contraseña no válidos:<br>Solicitud rechazada!.<br>";
}else{
$_SESSION["auth"] = "true"; // usuario autorizado.
$_SESSION["lastAcces"] = date(); // timestamp del ultimo movimiento del usuario.
header ("Location: http://localhost/laucha/login/auth/private.php"); // redirecciono a la seccion privada.
}
Hasta acá anda todo bien. Luego, la sección restringida y nada raro nuevamente:
- private.php:
Código PHP:
<?php
session_start();
if ($_SESSION["auth"] <> "true"){
echo "Estas intentando entrar a un sitio restringido !.<br>";
}else{
echo "Bienvenido.<br>";
}
?>
<a href="otra.php" target="_blank" name="ejemplo">otra pagina</a><br>
<a href="quit.php" target="_blank" name="ejemplo">quit!</a><br>
Ahora si. Es acá cuando dejo pasar unos minutos (más de 5, porque es el tiempo máximo de inactividad permitida que quiero) e intento acceder a el enlace de "otra pagina".
- otra.php
Código PHP:
<?php
session_start();
if ($_SESSION["auth"] <> "true"){
echo "Estas intentando entrar a un sitio restringido!.<br>";
}else{
$time2kill = 300; // 300 segundos = 5 minutos.
$lastAcces = $_SESSION["lastAcces"];
$now = date(); // timestamp actual.
$elapsed = ($now - $lastAcces); // transcurrido desde el ultimo movimiento.
if ($elapsed >= $time2kill) {
session_unset();
session_destroy();
header("Location: notime.php");
}else{
$_SESSION["lastAcces"] = $now;
echo "esta es otra pagina";
}
}
?>
El problema es que me deja entrar al sitio y visualiza el contenido, cuando por la resta entre $now - $lastAcces me debería dar un número mayor a 300 (digo, si espere 5 minutos o más).
No se si estare aplicando bien la idea en el código o si hay algún error en los else...estoy desde las 9 de la mañana y no lo puedo sacar
.
Agradecería cualquier ayudilla.
Saludos