Potresti inserire in un db ogni visitatore che entra nel portale (controlli nel database, se non ce lo inserisci, se ce aggiorni l'ora), dopo 5 minuti se il visitatore se ne è andato, lo cancelli dal database (potresti inserire un controllo dopo 30 secondi, ma faresti appesantire il tuo sito)

Codice PHP:
@$date date(YmdHi);

//Inserisco nel database i nuovi visitatori o aggiorno l'ora di quelli gia' presenti
$on mysql_num_rows(mysql_query("SELECT * FROM online WHERE ip='$ip"));
if (
$on>0) {
    
$update mysql_query("UPDATE online SET date='$date' WHERE ip='$ip'");
} else {
    
$insert mysql_query("INSERT INTO online VALUES ('$ip','$date')");
}

//Cancello dal database i dati piu' vecchi di 5 minuti
$old mysql_query("SELECT * FROM online");
while (
$row mysql_fetch_assoc($old)) {
    
$ip_db $row['ip'];
    
$date_db $row['date'];
    if (
$date_db<($date-5)) {
        
$delete mysql_query("DELETE FROM online WHERE ip='$ip_db'");
    }