Como hacer algo cuando se desconecte??

Iniciado por isseu, 21 Marzo 2009, 00:45 AM

0 Miembros y 1 Visitante están viendo este tema.

Karman

Cita de: OzX en 21 Marzo 2009, 06:18 AM
Parte del ajax esta en el Servidor, no Importa si lo cierres, te cae una casa en el pc, el contador que incluso podria estar en php llamado por ajax, ese php esta en el servidor, lo cual salva de cualquier problema por parte del cliente. (browser).

No, ni parte ni nada, lo que está en el servidor es PHP, pero fuera de eso, puedes utilizar como te dijeron bases de datos son sesiones, guardar IP en sesion (en caso de desconexión), identificador de browser (en caso de distinto browser), o tiempo límite de respuesta en caso que no coincida ninguno de los anteriores...

S2

Spider-Net

Cita de: yeikos en 21 Marzo 2009, 04:18 AM
Mediante ajax haz que el usuario realice peticiones constantemente (cada 10/30/60 segundos), en el momento en el que en un periodo del tiempo, fijado anteriormente, no se reciba ninguna petición significará que el usuario se habrá desconectado (cerrado el navegador, apagado el ordenador, sin conexión a internet, etc, etc).

Esta es la respuesta más acertada creo yo, pero tengo una duda. Como compruebas que no has recibido ninguna petición? Quiero decir yo entro en la página y se registra mi sesión y ahora me voy, por lo tanto, qué proceso es el que analizaría cada 20 o 30 segundos si sigo o no online? si ya no estoy ejecutando ninguna página? No sé si me explico, si alguien me entiende que por favor conteste, sino diganmelo y me explico un poco mejor xD

naderST

#12
Insisto en bases de datos  :xD aca tengo un script php para usuarios en linea y ese lo puedes adaptar para lo que quieres hacer:

Código (php) [Seleccionar]

<?php
$dbhost 
"localhost";
$dbuser "root";
$dbpass "a";
$dbname "test";
$contime 60;

$con mysql_connect($dbhost$dbuser$dbpass);
mysql_select_db($dbname$con); 

$fecha time();
$ip $_SERVER['REMOTE_ADDR']; 
$tiempo = ($fecha+$contime);

mysql_query("DELETE FROM gente_enlinea WHERE fecha < '$fecha'");
$query mysql_query("SELECT * FROM gente_enlinea WHERE ip = '$ip'");

if(
mysql_num_rows($query)){
mysql_query("UPDATE TABLE gente_enlinea SET fecha = '$tiempo' WHERE ip = '$ip'");
}else {
mysql_query("INSERT INTO gente_enlinea(fecha, ip) VALUES('$tiempo', '$ip')");
}

$on mysql_num_rows(mysql_query("SELECT * FROM gente_enlinea"));
echo 
$on;
?>



La tabla gente_enlinea tiene 2 campos ip y fecha nada mas

yeikos

Cita de: Spider-Net en 21 Marzo 2009, 15:31 PM
Cita de: yeikos en 21 Marzo 2009, 04:18 AM
Mediante ajax haz que el usuario realice peticiones constantemente (cada 10/30/60 segundos), en el momento en el que en un periodo del tiempo, fijado anteriormente, no se reciba ninguna petición significará que el usuario se habrá desconectado (cerrado el navegador, apagado el ordenador, sin conexión a internet, etc, etc).

Esta es la respuesta más acertada creo yo, pero tengo una duda. Como compruebas que no has recibido ninguna petición? Quiero decir yo entro en la página y se registra mi sesión y ahora me voy, por lo tanto, qué proceso es el que analizaría cada 20 o 30 segundos si sigo o no online? si ya no estoy ejecutando ninguna página? No sé si me explico, si alguien me entiende que por favor conteste, sino diganmelo y me explico un poco mejor xD

Imaginen que encerramos una mariposa en una caja transparente, cerrada al vacio, la tapamos con una manta y la dejamos ahí durante 1 día...

¿Cuando sabremos si la mariposa sigue viva? Cuando destapemos la manta.

Ahora la mariposa es el usuario, que siga viva significa que sigue conectado, la caja es la página Web y la acción de quitar la manta es cuando nosotros visitamos la página Web administrativa para saber quien sigue conectado.

La página Web que visita el usuario es simple; cada vez que el usuario haga una petición cada X segundos se actualizará en la base de datos la fecha y hora exacta (timestamp) en la que realizó la petición. A este valor lo llamaremos Y.

Ahora nosotros visitamos la página Web administrativa (destapamos la manta) y hacemos la siguiente consulta para saber aquellos usuarios que no se encuentran conectados:

timestamp - valor Y del usuario > X

Si la diferencia entre la fecha actual y la fecha del usuario es mayor que X deducimos que el usuario no se encuentra activo, ya que cada X segundos el usuario tubo que actualizar el valor de Y, y si no lo hizo fue por que se desconectó...

¿Por qué os he metido el cuento de la mariposa? Porque en este caso, hasta que nosotros no visitamos la página Web administrativa no somos conscientes de la realidad, al igual que hasta que no destapamos la manta no sabemos si la mariposa sigue viva...

Existe otro método... que seria como quitarle la manta a la caja o quitársela en periodos de Z segundos y observarla continuamente. Para ello habría que ejecutar una aplicación en el servidor para que esté alerta todo el tiempo en busca de usuarios desconectados, en base a la consulta de arriba.

Y he ahí la cuestión, ¿queremos ser nosotros quien avisa o queremos que nos avisen?

OzX

Cita de: Karman en 21 Marzo 2009, 07:12 AM
Cita de: OzX en 21 Marzo 2009, 06:18 AM
Parte del ajax esta en el Servidor, no Importa si lo cierres, te cae una casa en el pc, el contador que incluso podria estar en php llamado por ajax, ese php esta en el servidor, lo cual salva de cualquier problema por parte del cliente. (browser).

No, ni parte ni nada, lo que está en el servidor es PHP, pero fuera de eso, puedes utilizar como te dijeron bases de datos son sesiones, guardar IP en sesion (en caso de desconexión), identificador de browser (en caso de distinto browser), o tiempo límite de respuesta en caso que no coincida ninguno de los anteriores...

S2

a?
Insisto en lo de ajax, ahorras mucho mas codigo. y tambien optimizacion ¡ lo que es fundamental, te puedes crear un sistema completa en php y mysql pero si lo puedes hacer en ajax, mucho mejor ¡.

insito en la nocion de yeikos

Saludos¡

Spider-Net

Gracias yeikos. Buena explicación mediante el principio de incertidumbre de Heisenberg, eso sí, cambiando el gato por una mariposa xD

Ya entendí como hacerlo, el momento de comprobar quien está online será cuando yo me conecte al panel de adminstración. Gracias por la explicación.

Saludos!

yeikos

jaja, la verdad es que cambié el gato por la mariposa porque me parecía muy cruel xd

saludos!