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

Cierre de sesión al cerrar el navegador en PHP


Código en PHP para cerrar sesiones cuando se cierra el navegador.


10/6/05 - Introducción

Mucho más sencillo de lo que uno imagina, es hacer que una sesión caduque en forma automática cuando el usuario cierre el navegador.

En principio, vamos a definir a que nos referimos con cerrar el navegador.
El servidor entenderá que el usuario cerró el navegador cuando ya no se encuentre visitando ninguna de las páginas de nuestro sitio. Es decir, si un usuario que para navegar nuestro sitio abrió al menos 2 páginas en 2 ventanas diferentes, el servidor considerará que cerró el navegador cuando hasta la última ventana sea abandonada. Ya sea porque el usuario la cerró o porque fue hacia otro sitio que no es el nuestro.

Entonces, para que la sesión caduque al cerrar el navegador, habrá que, por un lado, forzar al php.ini a que propague la sesión solamente en cookies y por otro lado, asignarle a ésta, una duración cero.

Para forzar al php.ini hay dos formas: modificar el php.ini directamente o cambiar los valores desde nuestro script.

Opción 1

Configurar el archivo de inicio de php (php.ini) en forma directa.

Si tienes acceso a este archivo, habrá que buscar y cambiar el valor a:

session.use_trans_sid = 0
session.use_only_cookies = 1


Esta última, justamente será la que indicará que la sesión debe propagarse solo a través de cookies.

Opción 2

Cambiar la configuración del php.ini desde nuestro script php.

Esta opción consiste en forzar al php.ini desde nuestro script php (No todos los servidores tienen habilitada esta opción. Si el servidor no es propio, por las dudas, consulta con tu proveedor).

Para hacerlo, utilizaremos la función ini_set()

ini_set("session.use_trans_sid","0");
ini_set("session.use_only_cookies","1");

Ahora solo restará, cambiar el parámetro de duración a la cookie de la sesión. Esto lo haremos en nuestro script con la siguiente instrucción:

session_set_cookie_params(0, "/", $HTTP_SERVER_VARS["HTTP_HOST"], 0); Con lo cual estaremos indicando una duración de 0 (cero) segundos. Esto significará que durará hasta que termine el script.

Por fin, hemos llegado al código:

Cierre de sesión al cerrar el navegador en PHP: módulo de control de datos

Verás reflejados los cambios al script anterior, indicados en negritas. Estos cambios serán también los que se apliquen al módulo de seguridad. De todas formas, aquí te cargo los dos códigos.

<?
//si es necesario cambiar la config. del php.ini desde tu script
ini_set("session.use_only_cookies","1");
ini_set("session.use_trans_sid","0");

 
//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_set_cookie_params(0, "/", $HTTP_SERVER_VARS["HTTP_HOST"], 0);
   //cambiamos la duración a la cookie de 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 al cerrar el navegador en PHP: módulo de control de datos
Verás reflejados los cambios al script anterior, indicados en negritas.

<?
//si es necesario cambiar la config. del php.ini desde tu script
ini_set("session.use_only_cookies","1");
ini_set("session.use_trans_sid","0");


//iniciamos la sesión
session_name("loginUsuario");
session_start();
session_set_cookie_params(0, "/", $HTTP_SERVER_VARS["HTTP_HOST"], 0);
//cambiamos la duración a la cookie de la sesión


//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
+ 5 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 Scripts en PHP


 Comentarios sin revisar
Entre los comentarios no revisados puede haber algunos interesantes que se hayan enviado recientemente.
 Se han encontrado 5 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
+Scripts en 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