Ver Mensaje Individual
  #20 (permalink)  
Antiguo 03/04/2011, 15:13
fede1976
 
Fecha de Ingreso: diciembre-2007
Mensajes: 467
Antigüedad: 16 años, 4 meses
Puntos: 3
Respuesta: Usuarios online con php

Jaime:

Armé todo el código y funciona perfectamente. No estoy seguro de que funcione en tu LAN conectada a internet, pero creo que si.
Desarrollé un archivo flash al que llamé pulsador.swf. Este archivo lo que hace es conectar con determinado archivo PHP (usuarios_online.php) cada cierto tiempo (3 segundos). Usuarios_online.php hace dos cosas, si esa sesión acaba de empezar, crea un numero al azar e inserta este dato junto con la fecha en una tabla. Si la sesión está activa, sólo actualiza la hora de la misma.
La idea es que insertes este flash en todas las página de tu sitio, le ponés los valores de ancho y alto en cero y ni siquiera se ve.
Los códigos son estos:

usuarios_online.php:

session_start();

mysql_connect("localhost","tu_servidor","tu_contra sena");
$tiempo_actual = time();



if ($_SESSION["activo"] == 'si')
{
$id = $_SESSION["id"];
$actualizacion_hora = mysql_db_query("tu_base", "UPDATE online SET hora ='$tiempo_actual' where id='$id'");
}
else
{
$_SESSION["activo"] = 'si';
$_SESSION["id"] = rand(1,1000000);
$id = $_SESSION["id"];
$inserta_id = mysql_db_query("tu_base", "insert online (id, hora) values ('$id', '$tiempo_actual')");
}


pulsador.fla:

System.security.allowDomain("http://localhost", "127.0.0.1");
var comunicacion_con_el_servidor = new LoadVars();

temporizador1 = setInterval(mostrarme_online, 3000);

function mostrarme_online()
{

comunicacion_con_el_servidor.sendAndLoad("usuarios _online.php", comunicacion_con_el_servidor, "Post");
}


además hice una index que muestra la cantidad de usuarios conectados, menos el que se acaba de conectar. Es decir, yo me centré en la generación de la tabla con los usuarios activos, fijáte vos como querés mostrar esos usuarios activos, haciendo otro FLA, usando el mismo o usando AJAX.

index.php:

mysql_connect("localhost","tu_servidor","tu_contra sena");
$tiempo_actual = time();
$ver_usuarios_online = mysql_db_query("tu_base", "SELECT * from online where hora > $tiempo_actual - 60");
$cantidad_de_usuarios = mysql_num_rows($ver_usuarios_online); // este valor no incluye al usuario que está entrando

$pagina = '<font size="20">'.$cantidad_de_usuarios.'</font><embed src="pulsador.swf" style="width:0; height:0">';
echo $pagina;


La tabla que uso tiene dos campos: id y hora.
Lo probé y funciona perfecto, incluso, en el pulsador podes cambiar ese 3000 o modificar la sentencia mysql en la que le resto 60 a $tiempo_actual y así definir como quieras los tiempos para decidir si un usuario está o no online.
Decíme si te sirve!
Saludos.



Federico