Portada | Monotemáticos | Secciones | Desarrolladores | Comunidad | Servicios | Servicios profesionales | RSS
Desde 0 | HTML | CSS | ASP | PHP | AJAX | Javascript | Promoción de webs | Rentabilidad de webs
Directorio | Manuales | Scripts | FAQs | Programas | Artículos Copyleft | Actualidad | La Cosecha | Colabora
Registrarse | Vuestras páginas | Foros del web | Lista de correo | Boletín de novedades
Generador METAs | Compras | Busca cursos
Alojamiento | Dominios.es | Micropagos SMS | Buscadores | Patentes, marcas | Creación web | Multimedia | Videos
Desarrollo Freelance | Buscar proyectos | Buscar profesionales | Solicitar desarrollo

Diferentes formas de cerrar sesión en PHP


Cómo cerrar una sesión autenticada correctamente, por inactividad o por cierre del navegador por parte del usuario.


18/5/05 - Veremos como cerrar la sesión del usuario cuando:

  • El tiempo de inactividad del usuario supere "x" cantidad de tiempo (segundos, minutos, etc...).
  • El usuario cierre el navegador y abandone por completo nuestro sitio.
Cierre de sesión por inactividad en PHP: módulo de control de datos

Algo que puede parecer muy obvio para unos y muy complejo para otros, pero que innegablemente muchos de nosotros nos hemos preguntado en algún momento: ¿Cómo caducar una sesión en PHP?

Ahora veremos que tan sencillo es. Solo tendremos que:
  • Crear una nueva sesión que guarde una fecha y hora
  • Comprobar en nuestra capa de seguridad el tiempo transcurrido entre la sesión guardada y la hora actual
  • Actualizar la sesión o destruirla según corresponda
Lo primero que debemos hacer entonces, es crear la nueva sesión y asignarle como valor, la hora actual. Esto lo haremos en el momento que el usuario ingresa al sistema con sus datos de acceso.

<?
//vemos si el usuario y contraseña es váildo
if ($_POST["usuario"]=="miguel" && $_POST["contrasena"]=="qwerty"){
    //usuario y contraseña válidos
    session_name("loginUsuario");
    //asigno un nombre a la sesión para poder guardar diferentes datos
   session_start();
    // inicio la sesión
    $_SESSION["autentificado"]= "SI";
    //defino la sesión que demuestra que el usuario está autorizado
    $_SESSION["ultimoAcceso"]= date("Y-n-j H:i:s");
    //defino la fecha y hora de inicio de sesión en formato aaaa-mm-dd hh:mm:ss
    header ("Location: aplicacion.php");
}else {
    //si no existe le mando otra vez a la portada
    header("Location: index.php?errorusuario=si");
}
?>


Cierre de sesión por inactividad en PHP: módulo de seguridad

El segundo paso, será comprobar el tiempo transcurrido entre la fecha guardada y la hora actual en nuestra capa de seguridad y actuar en consecuencia.

Para hacerlo, tendremos que realizar un cálculo muy sencillo:

    tiempo transcurrido = (hora actual - fecha guardada)

Y luego, restará saber si el tiempo transcurrido es mayor, menor o igual que el tiempo de caducidad de la sesión (representado como "x"):

    si (tiempo transcurrido >= x), actúo en consecuencia a lo hallado

Para efectuar estos cálculos utilizaremos como unidad de tiempo el segundo. En nuestro ejemplo, caducaremos la sesión, transcurridos 10 minutos de inactividad (donde: 10*60 = 600 segundos). Para efectuar estos cálculos y tomar como unidad de medida el segundo, será necesario convertir las fechas a segundos. Para ello, utilizaremos la función strtotime.

Por lo tanto, calcularemos el tiempo transcurrido (tiempo transcurrido = (hora actual - fecha guardada)) de la siguiente manera:

<?
//iniciamos la sesión
session_name("loginUsuario");
session_start();

//antes de hacer los cálculos, compruebo que el usuario está logueado
//utilizamos el mismo script que antes
if ($_SESSION["autentificado"] != "SI") {
    //si no está logueado lo envío a la página de autentificación
    header("Location: index.php");
} else {
    //sino, calculamos el tiempo transcurrido
    $fechaGuardada = $_SESSION["ultimoAcceso"];
    $ahora = date("Y-n-j H:i:s");
    $tiempo_transcurrido = (strtotime($ahora)-strtotime($fechaGuardada));

    //comparamos el tiempo transcurrido
     if($tiempo_transcurrido >= 600) {
     //si pasaron 10 minutos o más
      session_destroy(); // destruyo la sesión
      header("Location: index.php"); //envío al usuario a la pag. de autenticación
      //sino, actualizo la fecha de la sesión
    }else {
    $_SESSION["ultimoAcceso"] = $ahora;
   }
}
?>

 Seguir navegando a partir aquí:
+ 1 manual relacionado
+ 1 categoria relacionada
+ 6 comentarios (Añadir)
+ 3 comentarios no revisados

 Autoría, licencia y acciones sobre este artículo

Informe de Eugenia Bahit*
Desarrolladora ASP y PHP
URL: http://www.cmzk.com.ar

Atención: Copyright. Este artículo no se puede reproducir sin la autorización expresa del autor.

* Para consultas técnicas utilizar la lista de correo.

Versión imprimible Versión imprimible del artículo
Enviar artículo por e-mail Enviar artículo por e-mail
Añadir un comentario al artículo Publicar un comentario del artículo

Manuales relacionados con este artículo
Dentro de Sistema de autentificación PHP

Categorias relacionadas
A través de las categorías de nuestro directorio se pueden encontrar otro tipo de recursos relacionados con este artículo:
+ Entrar en Manuales de PHP


 Comentarios de los visitantes
Los comentarios de los visitantes son para ampliar la información del artículo. Cualquiera puede participar.
Se muestran 6 comentarios revisados

 Comentario de jhony192
02/6/05 
Esta muy bueno el articulo, pero en lo personal creo que deberia extenderse a detallarse mas los tipos de sessiones como
Cookies y WWW-Authenticate ya que ambas son tambien importantes.

 Comentario de graziany
02/6/05 
El artículo es muy bueno, pero existen aveces problemas que si uno no es experto en el tema se puede enredar. En el caso de la varible $_SESSION que en algunos PHP no se tiene "como en el caso mio", le recomiendo usar session_register("Nombre_Variable") y si les ocurre problemas con el PHP porque no han configurado el directorio para eso de las seciones, pueden entrar en el archivo PHP.ini buscan la linea donde aparece session.save_path y le agregan la ruta donde quiera que el sistema guarde temporalmente las seciones, ejemplo session.save_path = "c:windows emp"; este es en el caso de windows XP. Espero que esto les sirva de mucho. Att: Ingeniero Graz.

 Comentario de graziany
02/6/05 
El artículo es muy bueno, pero existen aveces problemas que si uno no es experto en el tema se puede enredar. En el caso de la varible $_SESSION que en algunos PHP no se tiene "como en el caso mio", le recomiendo usar session_register("Nombre_Variable") y si les ocurre problemas con el PHP porque no han configurado el directorio para eso de las seciones, pueden entrar en el archivo PHP.ini buscan la linea donde aparece session.save_path y le agregan la ruta donde quiera que el sistema guarde temporalmente las seciones, ejemplo session.save_path = "c:windows emp"; este es en el caso de windows XP. Espero que esto les sirva de mucho. Att: Ingeniero Graz.

 Comentario de graziany
03/6/05 
//Esto es solo una ayuda para cuando necesiten trabajar la funcion header
//en este artículo.
//Para que la funcion header() trabaje sin ningun contratiempo
// y cuando ejecute la pagina PHP desde el navegador
//esta no arroje ningun tipo de error hay que modificar una
//linea en el archivo php.ini y cambiar el estado de Off a on
//como se muestra a continucaion output_buffering=on;
//Ingeniero Graziany.

 Comentario de Esteban
02/9/05 
Todos los artículos están muy buenos y lo mas importante es que son muy fáciles de entender y a su vez se pueden hacer practicos en la realidad. Muchas gracias por publicar estos ariculos. Me han servido se gran ayuda. Esteban.

 Comentario de Tadeo
09/8/06 
Saludos, muy bueno el articulo, pero en cuanto al extra de seguridad respecto al tiempo, este solo tendrá efecto al momento de hacer algún click en la pagina protegida o al realizar alguna transacción en esta, de lo contrario esta pagina siempre estara ahi en pantalla aun transcurrido el tiempo, claro que aporta seguridad pero podría estar en pantalla información delicada por lo cual sugiero además del timeout en php usar meta redirecciones en las paginas protegidas: <META http-equiv=Refresh content="600; URL=URLdeSalida.php">

Añadir un comentario al artículo Añadir un comentario del artículo
 Comentarios sin revisar
Entre los comentarios no revisados puede haber algunos interesantes que se hayan enviado recientemente.
 Se han encontrado 3 comentarios sin revisar

Ver el comentario no revisadoVer los comentarios no revisados
Añadir un comentario al artículo Añadir un comentario del artículo



Enlaces:
Maestrosdelweb
  Ir arriba

Manuales relacionados
+Sistema de autentificación PHP
Categorías
+Manuales de PHP

Lectura recomendada
+ PHP

Compra este libro en Agapea, la librería urgente a domicilio.

Tienda DesarrolloWeb

DesarrolloWeb.com | Copyright | Anunciese | Acerca de | Datos legales | Contacta | Por GuiarteMultimedia