Ver Mensaje Individual
  #2 (permalink)  
Antiguo 26/11/2003, 00:49
Avatar de jpinedo
jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
Para saber cuántos usuarios conectados tienes, hay un script en las FAQ's...
Ahora, lo que puedes hacer es crear una tabla en tu BD que tenga como mínimo la siguiente estructura:
CREATE TABLE sesiones (
usuario_nombre varchar(25) NOT NULL,
tiempo varchar(14) NOT NULL,
invitado int(1) NOT NULL,
);
Y utilizar una función como la que sigue:
Código PHP:
<?php
function online(){
    if (!isset(
$_SESSION['usuario_nombre'])){
        
$usuario_nombre $_SERVER['REMOTE_ADDR'];
        
$invitado 1;
    }else{
        
$usuario_nombre $_SESSION['usuario_nombre'];
        
$invitado 0;
    }
    
$pasado time()-900;//900 segundos. Cambiar por el plazo que se quiera dar al usuario para realizar alguna acción (recargar por ejemplo).
    
$sql "DELETE FROM sesiones WHERE tiempo < $pasado";
    
mysql_query($sql);
    
$sql "SELECT tiempo FROM sesiones WHERE usuario_nombre='$usuario_nombre'";
    
$result mysql_query($sql);
    
$tiempo time();
    if (
mysql_num_rows($result) == 1){
        
$sql "UPDATE sesiones SET usuario_nombre='$usuario_nombre', tiempo='$tiempo', invitado='$invitado' WHERE usuario_nombre='$usuario_nombre'";
    }else{
        
$sql "INSERT INTO sesiones (usuario_nombre, tiempo, invitado) VALUES ('$usuario_nombre', '$tiempo', '$invitado')";
    }
    
mysql_query($sql);
}
?>
Esta función la saqué no recuerdo de dónde, pero creo que el php-nuke utiliza algo así... Tal vez podría haber problemas si se utiliza ips compartidas... pero creo que como idea está buena... por ahí sería mejor utilizar el SESSID... no lo he pensado.
Se debe llamar a esta función cada vez que se carga (o recarga) una página.
Para obtener el número de visitantes activos, debrás utilizar un código como el siguiente:
Código PHP:
$sql "SELECT usuario_nombre FROM sesiones WHERE invitado=0";
$result mysql_query($sql);
$total_registrados mysql_num_rows($result);
echo 
"En línea:<br />";
echo 
"Usuarios registrados: ".$total_registrados."<br />";
while (
$row mysql_fetch_array($result)){
    echo 
$row['usuario_nombre']."<br />";
}

$sql "SELECT * FROM sesiones WHERE invitado=1";
$result mysql_query($sql);
$total_invitados mysql_num_rows($result);
echo 
"Invitados: ".$total_invitados."<br />";
echo 
"Total usuarios en línea: ".($total_invitados $total_registrados)."<br />"
Espero te sirva... si no entiendes algo, pregunta aquí mismo. Y a quien tenga una idea de cómo resolver el problema de las ip's, también postear por favor.
Saludos

Última edición por jpinedo; 26/11/2003 a las 21:25