Foros del Web » Programando para Internet » PHP »

saber si un determinado usuario está online mediante mysql

Estas en el tema de saber si un determinado usuario está online mediante mysql en el foro de PHP en Foros del Web. Hola a todos, Mi problema es que quiero saber que usuarios logeados están online en mi página web. Para ello tengo en mi base de ...
  #1 (permalink)  
Antiguo 04/07/2009, 16:16
 
Fecha de Ingreso: julio-2009
Mensajes: 4
Antigüedad: 14 años, 10 meses
Puntos: 0
saber si un determinado usuario está online mediante mysql

Hola a todos,

Mi problema es que quiero saber que usuarios logeados están online en mi página web.

Para ello tengo en mi base de datos un campo, el cual si está a 0 significa que está offline, 1 en caso contrario. De esta manera visualizar a los usuarios es fácil, ya que hago una llamada a los registros y si ese campo esta a 1 se introduce el nombre en una tabla.

Para saber si esta online, pondrá a 1 el campo cuando se loguee en la página. Y cuando le da al boton cerrar se pondrá a 0. Pero el problema es cuando el usuario cierra la página web, la cookies de sesión se elimina automatimaticamente se me queda ese campo en 1 cuando no es correcto.

He estado leyendo por el foro y dice que lo que tengo que hacer es:
- poner yo mi propio tiempo de inactividad (900 segundos, por ejemplo).
- poner otro campo con el dia/hora para saber cuando se ha conectado el usuario.
- y no se qué más porque ningun código visualiza el nombre de usuarios, solo el número de estos.

Aparte tengo otra idea de como hacerlo:
-ver si la cookie de sesion de un usuario se ha eliminado y en ese caso modificar el campo a 0.

Ahora, he aqui mis dudas:
- Como administrador (o base de datos), ¿puedo saber cuando una cookie de sesión de un usuario se ha eliminado?
Si es asi, lo único que hay que hacer es una función que la base de datos haría cada 10 minutos preguntando que usuarios tienen el campo a 1 y no tienen cookie de sesión.

- En caso de que el administrador no pueda saber eso, entonces mi idea no funciona Entonces, ¿cómo podría modificar el campo a 0 cuando el usuario cierra la página?


Muchas gracias por su atención.
  #2 (permalink)  
Antiguo 04/07/2009, 16:24
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: saber si un determinado usuario está online mediante mysql

Funciona pero tienes que escribir una columna extra de dia y hora, que se actualize cada vez que un usuario visite una pagina. Verificas esa columna si el tiempo de esa columna excede el tiempo que tu tienes establecido pues lo modificas a 0.
  #3 (permalink)  
Antiguo 04/07/2009, 16:47
 
Fecha de Ingreso: julio-2009
Mensajes: 4
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: saber si un determinado usuario está online mediante mysql

Pero de esa manera puede surgir el problema de que si tu pones un tiempo de media hora, obligas al usuario a desconectarse cada media hora
  #4 (permalink)  
Antiguo 04/07/2009, 16:56
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: saber si un determinado usuario está online mediante mysql

No porque te habia indicado que se actualize cada vez que un usuario visite una pagina. O sea yo visito tu pagina y me logueo. Estoy en ella por 5 minutos y luego le doy a otra pagina, vuelve a actualizarse la base de datos y luego despliega la informacion. Estoy como 10 minutos en esa pagina y visito otra pagina, vuelve a actualizarse la base de datos con el dia y la hora nueva y asi sucesivamente
  #5 (permalink)  
Antiguo 04/07/2009, 17:09
 
Fecha de Ingreso: julio-2009
Mensajes: 4
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: saber si un determinado usuario está online mediante mysql

Vale, ya entiendo.

En todas las páginas se le hace un include"actualizarTiempo.php" y ésta lo que hará será actualizar el tiempo de reloj del usuario.

Y por el otro lado, la revisión que la base de datos debe de hacer será de cada 10 minutos, cuya función será ver si el tiempo de cada usuario activo es mayor que el tiempo que yo diga es inactivo, y si lo es ponerlo inactivo.

¿Es todo funcionalmente correcto? ¿O se me olvida algo?

Gracias de antemano.
  #6 (permalink)  
Antiguo 04/07/2009, 17:19
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: saber si un determinado usuario está online mediante mysql

Tratalo y nos dejas saber
  #7 (permalink)  
Antiguo 04/07/2009, 19:03
 
Fecha de Ingreso: julio-2009
Mensajes: 4
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: saber si un determinado usuario está online mediante mysql

Hecho, y me funciona correctamente.

En la base de datos hice un campo "tiempo" de tipo int.

Este es el "actualizarTiempo.php" que se debe incluir en todas las páginas
Código PHP:
<?php
//si es usuario registrado guarda el tiempo
if (isset($_SESSION['id'])) {
    
$tiempousu time();
    
$registros=mysql_query("UPDATE usuarios SET tiempo = $tiempousu WHERE id = $_SESSION[id]"$conexion)
            or die(
"Problemas en el update:".mysql_error());
}
?>
Y esta es la función "revisarTiempo.php" que la base de datos debe hacer cada X tiempo

Código PHP:
<?php
$registros
=mysql_query("SELECT id, estado, tiempo FROM usuarios"$conexion)
            or die(
"Problemas en el select:".mysql_error());
//tiempo actual
$tiempoactual time();
//si no debe estar activo de guarda la id
while ($reg=mysql_fetch_array($registros)) {
    if (
$reg['estado'] == 1) {
        
$tiempolimite $reg['tiempo'] + 2700;
        if (
$tiempoactual $tiempolimite) {
            
$idinactivos[] = $reg['id'];
        }
    }
}
//se modifica el estado de las id
if (isset($idinactivos)) {
    for (
$i=0;$i<count($idinactivos);$i++) {
        
$registros=mysql_query("UPDATE usuarios SET estado=0 WHERE id = $idinactivos[$i] "$conexion)
                or die(
"Problemas en el update:".mysql_error());
    }
}
?>
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 14:33.