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