Foros del Web » Programando para Internet » PHP »

Cómo saber si el usuario está online o no?

Estas en el tema de Cómo saber si el usuario está online o no? en el foro de PHP en Foros del Web. Buenas, ¿De qué manera se puede saber si un usuario registrado en la web está online o no? Si el usuario tuviese que loguearse es ...
  #1 (permalink)  
Antiguo 25/03/2010, 14:21
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Cómo saber si el usuario está online o no?

Buenas,

¿De qué manera se puede saber si un usuario registrado en la web está online o no?

Si el usuario tuviese que loguearse es sencillo, activas el flag del campo ONLINE en el proceso de logeo.

Pero si el usuario tiene la sesión guardada en la cookie del navegador, la próxima vez que te visite no tendrá que loguearse porque la cookie le mantiene los datos, ¿Cómo detecto entonces que el usuario está online?

Muchas gracias de antemano!
  #2 (permalink)  
Antiguo 25/03/2010, 14:26
Avatar de lobo_php  
Fecha de Ingreso: noviembre-2007
Ubicación: Cali-Colombia
Mensajes: 1.869
Antigüedad: 16 años, 5 meses
Puntos: 75
Respuesta: Cómo saber si el usuario está online o no?

Podes hacer un contador de actividades, digamos, que si no se hacen registro de actividad del usuario en 10 minutos, su estado sería ausente, si pasa mas de 15 minutos, por ejemplo, entonces está desconectado, si digamos que está leyendo algo y tarda en leer 18 minutos, entonces primero apareceria ausente, luego desconectado, pero luego otra vez como conectado.

Para eso se debe de ejecutar una funcion que mire la actividad de los usuarios y les cambie el estado, digamos que se ejecute cada minuto.

Saludos.
__________________
Cabuntu.org - Difundiendo Software Libre en Cali, Colombia
Usuario Linux # 483175
  #3 (permalink)  
Antiguo 25/03/2010, 14:39
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Respuesta: Cómo saber si el usuario está online o no?

Cita:
Iniciado por lobo_php Ver Mensaje
Podes hacer un contador de actividades, digamos, que si no se hacen registro de actividad del usuario en 10 minutos, su estado sería ausente, si pasa mas de 15 minutos, por ejemplo, entonces está desconectado, si digamos que está leyendo algo y tarda en leer 18 minutos, entonces primero apareceria ausente, luego desconectado, pero luego otra vez como conectado.

Para eso se debe de ejecutar una funcion que mire la actividad de los usuarios y les cambie el estado, digamos que se ejecute cada minuto.

Saludos.
La idea la veo... pero como sabes que ese usuario no ha tenido actividad?

Y eso que se ejecute cada minuto, si en la página hay 20.000 usuarios no podría cargar mucho el servidor?

Gracias
  #4 (permalink)  
Antiguo 25/03/2010, 14:40
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Cómo saber si el usuario está online o no?

estoy de acuerdo, a lo mejor para ampliar la usabilidad de la técnica podría implementarse un script de sesión que se ejecute vía Ajax cada 5 minutos...

así, aunque te quedes pegado leyendo mientras tengas abierta la pagina que envía la actualización se entiende que sigues online... ;)
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 25/03/2010, 15:02
Avatar de lobo_php  
Fecha de Ingreso: noviembre-2007
Ubicación: Cali-Colombia
Mensajes: 1.869
Antigüedad: 16 años, 5 meses
Puntos: 75
Respuesta: Cómo saber si el usuario está online o no?

Pero si la página se cierra y deja de enviar mensajes de actividad, quien realiza la acción de definir el estado "desconectado" del usuario?, igual hay que ejecutar un script que lo haga. 5 minutos es mas tiempo para que se bloquee menos.
__________________
Cabuntu.org - Difundiendo Software Libre en Cali, Colombia
Usuario Linux # 483175
  #6 (permalink)  
Antiguo 25/03/2010, 15:05
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Cómo saber si el usuario está online o no?

Cita:
Iniciado por lobo_php Ver Mensaje
Pero si la página se cierra y deja de enviar mensajes de actividad, quien realiza la acción de definir el estado "desconectado" del usuario?, igual hay que ejecutar un script que lo haga. 5 minutos es mas tiempo para que se bloquee menos.
en todo caso puedes recurrir a un script ejecutado vía CRON, ahí podrías comparar los tiempos de actividad y hacer los cambios requeridos... (:
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 25/03/2010, 15:07
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Cómo saber si el usuario está online o no?

Para cuando cierren la aplicación pueden usar el método unload y onbeforeunload. Como también un cron job que corra cada cierto tiempo.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #8 (permalink)  
Antiguo 25/03/2010, 15:10
Avatar de lobo_php  
Fecha de Ingreso: noviembre-2007
Ubicación: Cali-Colombia
Mensajes: 1.869
Antigüedad: 16 años, 5 meses
Puntos: 75
Respuesta: Cómo saber si el usuario está online o no?

Ahh, debería leer sobre eso del cron, nunca me llegué a interesar, buen dato ;)
__________________
Cabuntu.org - Difundiendo Software Libre en Cali, Colombia
Usuario Linux # 483175
  #9 (permalink)  
Antiguo 25/03/2010, 15:53
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Respuesta: Cómo saber si el usuario está online o no?

Gracias por la participación ;)

Creéis que facebook utiliza ajax para saber el estado de lo usuarios?
Sin ir mas lejos en muchos foros puedes ver abajo quién está conectado, sería el mismo caso, en un foro puedes guardar la sesión en las cookies sin embargo cuando entras en la página ves que apareces en la lista de personas "conectadas" viendo el foro.
Entiendo que este ejemplo del foro no utilizan ningun cron :S

¿Puede ser que se haga de otra manera?

Saludos!
  #10 (permalink)  
Antiguo 25/03/2010, 16:54
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Respuesta: Cómo saber si el usuario está online o no?

Estaba pensando esta idea, a ver que os parece...

Al inicio de cada página se llama a un script
include('users_online.php");

En este script se ejecutará cada vez que un usuario vaya a una página (por lo que ya nos ahorramos el cron y/o las peticiones en ajax), tiene la función de:

Mirar si existe alguna cookie (concretamente la cookie con los datos de usuario y contraseña guardados, ej. "logeado"), si existe el script contabilizará a ese usuario como usuario online y registrado.

Si no existe la cookie (llamada "logeado") significa que el usuario no se ha logeado en la web y esta navegando como invitado, en ese caso se creará la cookie "invitado", el script leerá que la cookie que existe es de invitado y lo contabilizará como usuario invitado.

Este script a su vez comprueba la última actividad, es decir, si el tiempo que dejamos al usuario con el estado logeado es de 1 hora, esto es que hace 1 hora que no ha cambiado de página y por tanto no se ha actualizado el estado de la base de datos. Habrá expirado la cookie, y el campo de la base de datos tendremos que cambiarlo.

Un poco desarrollando las cookie... podría ser una única cookie con un array, esto es posible imagino...

usuario_status[fecha_actual] = fecha de la última vez que se cargó la pagina/script
usuario_status[usuario] = nombre del usuario registrado si tiene
usuario_status[estado] = registrado o invitado


Qué os parece el planteamiento, se aceptan mejoras!

Salu2!

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 21:11.