Foros del Web » Programando para Internet » PHP »

Deslogueo de usuarios

Estas en el tema de Deslogueo de usuarios en el foro de PHP en Foros del Web. Hola Tengo una pagina donde los usuarios se logean y deslogean, tengo una base de datos donde se van guardando los registros de la fecha ...
  #1 (permalink)  
Antiguo 12/11/2010, 16:36
 
Fecha de Ingreso: septiembre-2010
Ubicación: colombia
Mensajes: 45
Antigüedad: 13 años, 7 meses
Puntos: 0
Deslogueo de usuarios

Hola

Tengo una pagina donde los usuarios se logean y deslogean, tengo una base de datos donde se van guardando los registros de la fecha y hora de cuando se logean y desloguean todos los usuarios, pero si tengo abierta la pagina y la cierro sin desloguearme, en la base de datos queda la fecha de logeo pero no de deslogueo.

Hay alguna forma de detectar cuando cierra la pagina o pasa cierto tiempo para darle una fecha de cierre de sesion y asi no dejar campos en blanco de mi base de datos? esto lo hago porque necesito generar reportes de los usuarios y el tiempo que duran sus sesiones.

Espero haber sido claro

Muchas gracias!
  #2 (permalink)  
Antiguo 12/11/2010, 18:35
 
Fecha de Ingreso: febrero-2008
Mensajes: 34
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: Deslogueo de usuarios

Buenas, puedes controlar la sesion con php

session_start();
session_register();
session_unregister();
session_destroy();

Un ejemplo seria ver si esta logeado, sn redirect login, si esta, ver el time, y calcular time logeado, segun el que estimes destruir la sesion...


Código PHP:
Ver original
  1. <?
  2. ini_set("session.use_only_cookies","1");
  3. ini_set("session.use_trans_sid","0");
  4.  
  5. // INICIAMOS SESION
  6. session_name("login");
  7. session_set_cookie_params(0, "/", $HTTP_SERVER_VARS["HTTP_HOST"], 0);
  8. // DURACION COOKIE SESION
  9.  
  10. //VER SI ESTA LOGEADO
  11. if ($_SESSION["logeado"] != "SI") {
  12.     //NO, REDIRECT LOGIN
  13.     header("Location: index.php");
  14. } else {
  15.     //CALCULAMOS TIME
  16.     $fecha= $_SESSION["UltimoAcceso"];
  17.     $ahora = date("Y-n-j H:i:s");
  18.     $tiempo_transcurrido = (strtotime($ahora)-strtotime($fecha));
  19.  
  20.     //VER TIME TRANSCURRIDO
  21.      if($tiempo_transcurrido >= 600) { // TIEMPO
  22.       session_destroy(); // ELIMINAR SESION
  23.       header("Location: index.php"); // REDIRECT LOGIN
  24.       //SINO ACTUALIZAMOS SESION
  25.     }else {
  26.     $_SESSION["ultimoAcceso"] = $ahora;
  27.    }
  28. }
  29. ?>
  #3 (permalink)  
Antiguo 12/11/2010, 21:49
Avatar de luckystrikede11  
Fecha de Ingreso: octubre-2009
Ubicación: Concepcion, Chile
Mensajes: 240
Antigüedad: 14 años, 6 meses
Puntos: 17
Respuesta: Deslogueo de usuarios

para el usuario no cierre una pagina o advertirle que se cerrará su sesion, lo puedes hacer lo con javascript.

lo otro, para controlar el tiempo de una sesion de un usuario, es conveniente en este caso usar variables COOKIES en vez de SESSION
__________________
www.jcabezas.net
  #4 (permalink)  
Antiguo 12/11/2010, 22:03
Avatar de Sourcegeek
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: $mex['B.C.'];
Mensajes: 1.816
Antigüedad: 14 años, 11 meses
Puntos: 322
Respuesta: Deslogueo de usuarios

Creo que no es posible destruir una sesion cuando se cierra la pestaña (solo se auto-elimina cuando se cierra el navegador)
Asi que puedes ponerle cierta duracion a la sesion como por ejemplo 2 horas.. Es decir, cuando pasen 2 horas se va a eliminar la sesion

La sintaxis de session esta en php.net, saludos!
__________________
Buscas desarrollador web? Sourcegeek. Diseño web, Maquetación y Programación
¡Escribe bien! Esto es un foro, no un Facebook para que escribas con los pies
  #5 (permalink)  
Antiguo 13/11/2010, 09:26
 
Fecha de Ingreso: septiembre-2010
Ubicación: colombia
Mensajes: 45
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Deslogueo de usuarios

Hola a todos! Primero que todo gracias por su interes!

Les cuento que estoy utilizando un archivo php parecido al que puso szemog, pero le hice un pequeño cambio para intentar guardar ese cierre de sesion en la base de datos

Código PHP:
<?
//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
$nomb=$_SESSION["nombreUsuario"];
$idsesion=$_SESSION["idHistorial"];

//comprobamos que el usuario este logueado
if ($_SESSION["autentificado"] != "SI") {
    
//si no está logueado lo envío a la página de login
    
header("Location: index.php");
} else {
    
//si no es asi, 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 -600 segundos-
            
      
$fechahoy=date('Y-m-d H:i:s');
      
$conn mysqli_connect("localhost","root","","basededatos");
      
// $iniciasesion="INSERT INTO historial(usuario,fecha_out) VALUES ('$nomb','$fechahoy');";
      
$cierrasesion="UPDATE historial SET fecha_out='$fechahoy' WHERE id='$idsesion';";
      
$rss mysqli_query($conn,$cierrasesion);
      
      
session_destroy(); // cierro la sesión
      
      
header("Location: index.php"); //envío al usuario a la pagina de login
      //si no, actualizo la fecha de la sesión
    
}else {
    
$_SESSION["ultimoAcceso"] = $ahora;
   }
}
?>
Supuestamente al pasar 10 minutos, la sesion se cierra, y efectivamente, si dejo la pagina inactiva o cierro el navegador, a los 10 minutos se cierra la sesión. El problema es que no esta haciendo el UPDATE en la base de datos. Ese tipo de update lo estoy utilizando tambien cuando cierra la sesion normalmente, y si funciona, pero para este php no funciona.

Gracias por su colaboracion!
  #6 (permalink)  
Antiguo 13/11/2010, 10:36
 
Fecha de Ingreso: septiembre-2010
Ubicación: colombia
Mensajes: 45
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Deslogueo de usuarios

De pronto no hay alguna funcion de javascript que detecte cuando cierro la pestaña o ventana del explorador y haga el insert a la base de datos???
  #7 (permalink)  
Antiguo 13/11/2010, 11:40
Avatar de luckystrikede11  
Fecha de Ingreso: octubre-2009
Ubicación: Concepcion, Chile
Mensajes: 240
Antigüedad: 14 años, 6 meses
Puntos: 17
Respuesta: Deslogueo de usuarios

el javascript solo funciona en el navegador y no en el servidor.. tienes que hacer la mezcla con PHP para insertar en la base de datos..

esta funcion funciona para IE para advertir que esta cerrando la ventana:

Código HTML:
Ver original
  1. <body onbeforeunload="event.returnValue = 'Si cierras la ventana su sesion se cerrara.'">

la idea es hacer algo de este tipo pero que funcione los demas browser y con ajax haces una llamada asincrona para insertar y luego destruir la sesion
__________________
www.jcabezas.net

Etiquetas: usuarios
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:19.