Usuarios Online

Muchas veces encontramos sitios donde se nos muestra un contador donde podemos ver los usuarios online con php de una forma simple, esto es realmente útil, en especial si somos administradores de un sitio y queremos llevar unas estadísticas acerca de las conexiones, peticiones y visitas que se hacen a nuestro servidor. Personalmente prefiero utilizarlo solo para estadísticas, ya que de lo contrario no le sirve de nada al usuario saber cuanta gente estan viendo la página o la tienen abierta, la forma de hacerlo es con MySQL.

   Con MySQL almacenamos la ip y la fecha para posteriormente consultarla y compararla, ya que si no lo hacemos así tendremos un contador que simplemente sumara las visitas sin importar si es del mismo ordenador o no, primero creamos la tabla, por ejemplo que se llame "usuarios_online".

CREATE TABLE usuarios_online ( 
   date INT NOT NULL, 
   ip VARCHAR(15) NOT NULL 
);

   De esta forma tenemos 2 campos, la IP y la fecha, tomamos como límite 15 caracteres para la ip ya que es el valor máximo de una IP válida (255.255.255.255), ahora vamos con la conexión, la cual explique anteriormente la entrada "Enlazar PHP con MySQL", pero de igual forma la conexión va así.

<?php
$myconn = mysql_connect("servidor", "usuario", "clave");
mysql_select_db("nombre_bd",$myconn);
if (!mysql_select_db("nombre_bd",$myconn)){
   echo "Error al conectar a la Base de Datos";
   exit();
}
?>

   Como las variables las explique en la entrada anterior vamos ahora con el código que realmente nos interesa, el PHP, llamemoslo "usuarios_online.php".

<?php
require_once('conexion.php');
$time = 5;
$date = time() ;
$ip = $_SERVER['REMOTE_ADDR'] ;
$limite = $date-$time*60 ;
mysql_query("DELETE FROM usuarios_online WHERE date < $limite",$myconn) ;
$resp = mysql_query("SELECT * FROM usuarios_online WHERE ip='$ip'",$myconn) ;
if(mysql_num_rows($resp) != 0) {
 mysql_query("UPDATE usuarios_online SET date='$date' WHERE ip='$ip'",$myconn) ;
} else {
 mysql_query("INSERT INTO usuarios_online (date,ip) VALUES ('$date','$ip')",$myconn) ;
}
$resp = @mysql_query("SELECT * FROM usuarios_online",$myconn) or die(mysql_error());
$usuarios = mysql_num_rows($resp);
if ($usuarios == 0) {
 echo("No hay usuarios en línea");
} else {
 echo("Hay $usuarios usuarios en línea");
}
?>
   Donde lo que hacemos con el script es tomar la IP del visitante junto la fecha y hora en que accedió al sitio y la almacenamos en nuestra base de datos, luego hacemos la consulta simple, si la IP ya existía actualizamos la hora y fecha de visita, de lo contrario almacenamos una nueva. También establecemos una tiempo límite para almacenar dicha variable, es como el tiempo límite que tendrá ese usuario en caso de inactividad, en este caso le he puesto unos 5 min. los cuales están dados por la variable "time".

   Por último le pedimos que nos devuelva la cantidad de registro que hay en la base de datos, y como el script elimina los registros inactivos, únicamente nos devolvera los usuarios que están activos en el site, por lo que hacemos la comparación, si es 0 no hay ninguno si es mayor a uno entonces muestra la cantidad.

   Cabe resaltar que nunca se tendrá 0 (cero) usuarios inactivos, ya que si nosotros abrimos la página para saber la cantidad de usuario automáticamente nos volvemos un usuario activo, así que si preferimos podemos cambiar un poco el script y hacerlo con menos líneas, algo como esto:
$usuarios = mysql_num_rows($resp);
if ($usuarios > 0) {
   echo("Usuarios en línea: $usuarios");
}
   Ya por último nos queda cargar el dichoso script mediante un "include" o "require_once", de tal forma que donde queramos mostrar la cantidad de usuarios online colocamos lo siguiente:
<?php
   require_once("usuarios_online.php");
?>

   Espero sea de útilidad, y cualquier inquietud no duden en preguntar...


Lamentablemente hay muchos usuarios en la red que han llegado al blog para escribir obscenidades, así que la moderación se hace necesaria. Recuerda utilizar un lenguaje correcto y espera a que sea aprobado.

Si necesitas publicar código haz click en "Conversión" para hacerlo legible.
ConversiónConversión