En este tutorial veremos como definir el tiempo de vida de las sesiones en PHP, este ejemplo puede resultar útil para definir cuando caduca por defecto la sesión de un usuario en un sistema de login/identificación.
Empezamos el código con session_start();
<?php
session_start();
En este paso se crea una variable que defina el tiempo que el usuario este inactivo para que lo saque el sistema, 900 esta expresado en segundos que se traduce a 15min de duracion.
$inactivo = 900;
Buscamos la existencia de la variable de session en una condicion, luego en la variable $vida_session almacenamos el resultado de la resta entre la $_SESSION[‘tiempo’] y el tiempo actual (time).
Comparamos este resultado ($vida_session) con el tiempo de inactividad que definimos mas arriba, si el resultado es mayor que la variable $inactivo entonces la sesión se destruye y redirecciona a la (hipotética) pagina de login.
if(isset($_SESSION['tiempo']) ) {
$vida_session = time() - $_SESSION['tiempo'];
if($vida_session > $inactivo)
{
session_destroy();
header("Location: login.php");
}
}
Caso contrario se actualiza la sesion almacenando el tiempo actual en la variable $_SESSION[‘tiempo’]
$_SESSION['tiempo'] = time();
?>
Código final
<?php
session_start();
$inactivo = 900;
if(isset($_SESSION['tiempo']) ) {
$vida_session = time() - $_SESSION['tiempo'];
if($vida_session > $inactivo)
{
session_destroy();
header("Location: login.php");
}
}
$_SESSION['tiempo'] = time();
?>
Antoni dice
Hola,
Estoy aprendiendo mucho con vuestra ayuda y magnificos ejemplos, pero ahora me ha surgido una duda…
Si quisiera inplantar un sistema de control de «sesion» y de tiempo de «vida» a la vez, como deberÃa de hacerlo?,
Es decir creo un «index.html» que contenga un que llama a «sesion.php» donde compruebo en una base de datos (usuario y clave) e inicializa la variable «tiempo» y «usuario»… como hago para que la web (todas las paginas) tenga presente estos requisitos?, no se si me he explicado muy bien..
Saludos,
Antoni dice
Hola,
Estoy aprendiendo mucho con vuestra ayuda y magnificos ejemplos, pero ahora me ha surgido una duda…
Si quisiera implantar un sistema de control de «sesion» y de tiempo de «vida» a la vez, como deberÃa de hacerlo?,
Es decir creo un «index.html» que contenga un «form action…. …/form» que llama a «sesion.php» donde compruebo en una base de datos (usuario y clave) e inicializa la variable «tiempo» y «usuario»… como hago para que la web (todas las paginas) tenga presente estos requisitos?, no se si me he explicado muy bien..
Saludos,
Juan Pablo Aragón dice
abajo te puse algo que te puede servir saludos.
Juan Pablo Aragón dice
Hola Anton, yo lo que hago es crear un archivo session.php y le hago include a todas mis paginas, ahà tengo mi conexión, y todas con respecto a variables de sesion y de usuarios te lo dejo a ver si te sirve. saludos.
$inactivo)
{
session_destroy();
header(«Location: ../arp/index.php»);
}
}
$_SESSION[‘tiempo’] = time();
////———————CREAMOS LA CONEXION Y ASIGNAMOS LOS QUERYS A UTF8 POR LOS ACENTOS Y «Ñ»———————————
include(«conexion.php»); // este es el archivo de conexion
$link=Conectarse();
mysql_query(«SET NAMES ‘utf8′»);
$usuario=$_GET[‘usuario’];
////———————OBTENEMOS EL NOMBRE Y EL ID DEL USUARIO DE LA TABLA USUARIO———————————
$sql=»select id,nombre from usuarios_web where usr=’$usuario'»;
$res=mysql_query($sql,$link);
$row=mysql_fetch_array($res);
$usuario_id=$row[‘id’];
$nombre_usuario=$row[‘nombre’];
////————————REVISAMOS QUE LA VARIABLE DE SESION NO ESTE VACIA————————————–
if (isset($_SESSION[‘usuario’])){} else {header («Location: ../error_sesion.php»);exit;}
////————————REVISAMOS QUE LA VARIABLE USUARIOS NO ESTE VACIA—————————————
if ($usuario==»»){header («Location: ../error_sesion.php»);exit;}
////————————REVISAMOS QUE LA VARIABLE DE SESION SEA LA MISMA QUE EL USUARIO—————————————
if ($_SESSION[«usuario»]!=$usuario){header («Location: ../error_sesion.php»);exit;}
////————————REVISAMOS QUE EL USUARIO EXISTA EN NUESTRA BASE DE DATOS——————————-
$sql=»select * from usuarios where usr=’$usuario'»;
$resultado=mysql_query ($sql,$link);
$row=mysql_num_rows($resultado);
if ($row==0)
{
header («Location: ../error_sesion.php»);
exit;
}
?>
http://www.frecuenciamexico.com – La nueva tendencia en Radio Digital
Diana dice
Hola amigo, estoy utlizando tu codigo, pero el detalle es que, no apsa nada cuando pasa el tiempo que le defini en segundos, solamente redirecciona cuando le doy Actualizar a la pagina, o F5, pero que solito redireccione cuando pasa el tiempo definido de vida de la sesion no lo hace… es asi como debe de ser, o si deberia de redirigir automaticamente? Si no , como podria hacerlo automaticamente?
rayoax dice
anduve buscando miles de ejemplos , habÃa unos que decÃan modificar el archivo ini, otros con java script otros con ajax y no se que tanto mas, de casualidad llegue a esta web por un post de validar formularios, me puse a revisar todos los que tienen y encontre este, en menos de 5 minutos logro que mi sesion se cierre después del tiempo que determine… gracias por compartir el conocimiento y no solo eso hacerlo bien ….
Gerardo dice
estimado que tal, muchas gracias por la ayuda brindada entu blog esta genial, tengo una duda la cual es la session se cierra cuando estas sin hacer nada en la pagina? y si yo estaria interactuando la pagina y llegue el tiempo limite la session igual se cerraria?