2011-06-17 15 views
5

Tengo una tabla para rastrear el estado en línea del usuario estableciendo el campo 'is_online' en 1. Ahora el usuario inicia sesión en el sitio y apaga su sistema o apaga en ese momento que inició sesión. Aquí en la base de datos 'is_login' tiene el valor '1', lo que significa que todavía está usando el sitio.¿Cómo manejar el estado en línea del usuario cuando cierra el navegador?

Así que tengo que hacer un poco de lógica para cambiar ese valor a '0'.

¿Cómo puedo manejar esta situación usando PHP?

Respuesta

10

es habitual la solución para almacenar una marca de tiempo en la tabla que se actualiza cada vez que el usuario hace algo Los usuarios con una marca de tiempo reciente (por ejemplo, cinco minutos) se muestran como iniciados, todos los demás están desconectados.

Ni siquiera tiene que actualizarse en cada carga de página. Mantenga también una marca de tiempo en la sesión con la última actualización y solo actualice la tabla cuando el indicador de la base de datos esté a punto de caducar.

+0

Gracias, muy útil – mymotherland

3

Almacenar una actividad que dure desde la última vez. Cuando ha pasado más tiempo que un tiempo específico, trátelo como si estuviera fuera de línea. Debe reemplazar is_online con un campo DateTime, y actualizarlo cada vez que el usuario conectado visite el sitio web.

En el lugar que desea seleccionar todos los usuarios, en lugar de:

SELECT * FROM users WHERE is_online = 1 

que puede usar:

SELECT * FROM users WHERE is_online >= DATE_SUB(NOW(), INTERVAL 5 MINUTE) 
2

no se puede. HTTP cierra la conexión una vez que se entregó la página. Por el lado del servidor, todo lo que puede hacer es verificar si un usuario ha solicitado una página dentro de un cierto período de tiempo.

JavaScript podría ser tu amigo. Puede usarlo para crear un ping a un script php que luego actualiza la última marca de tiempo de solicitud. Una vez que ya no hay más ping, el usuario se va y lo sabrá.

Si tiene problemas con el lenguaje Java, un buen punto de partida sería aquí: http://www.w3schools.com/JS/

Es posible que desee centrarse en el AJAX y petición HTTP cosas.

cu romana

0

Debido a la naturaleza sin estado de la red no es posible saber con exactitud cuando el usuario deja su sitio web. Entonces realmente no puedes disparar ningún código para cambiar el valor mencionado.

Como el otro ha dicho, uno tiene que almacenar la actividad de tiempo transcurrido desde la última actividad para obtener una idea aproximada cuando fue la última vez que el usuario realmente estaba haciendo algo con el sitio web.

HTH :)

1

Puede utilizar jQuery para actualizar su sitio cada vez X, por lo que una función se ejecuta cada 10 segundos, lo siguiente código:

function updateTheBBDD(){ 
    ... calling mysql_connect -> mysql_insert -> mysql_close 
} 

setInterval("updateTheBBDD()",10000); 

Además, al pintar el estado del usuario monitor en lugar de consultar a la BD y:

1->green 
0->red 

Usted debe:

actual - time > 10 ---> red 
actual - time <= 10 ---> green 
Cuestiones relacionadas