A ovo je vrlo jednostavno i raspravljano o tome jedno milion puta.
Najjednostavniji nacin da se to uradi jeste da imas jednu tabelu sa korisnicima u kojoj cuvas osnovne podatke o korisniku (username, password/hash, email, lastactivity) ili da imas dvije tabele
od koji jedna sadrzi samo osnovne informacije o korisniku i link koji povezuje korisnika sa njegovim profilom u drugoj tabeli u kojoj cuvas profile korisnika.
Sve u svemu, poenta je da se ne opterecuje ni server ni baza sa suvisnim podacima.
Svaki put kada korisnik otvori neku stranicu, tj. kad posalje zahtjev za neku tvoju stranicu ti u svojoj bazi u njegovom profilu izmjenis njegov lastactivity.
Code:
$query = mysql_query("update user_profiles set lastactivity='. time() .' where id = $user_id limit 1") or die(mysql_error));
Sada nema potrebe da se ti podaci cuvaju u posebnoj tabeli ili jos manje da se postavlja cron koji bi cistio tu tabelu...
Zar nije jednostavnije staviti da je aktivan user = posjetio sajt ili otvorio neku stranicu u posljednjih 10min i nakon toga samo izbrojati ili uzeti sva imena koja odgovaraju upitu.
Primer:
Code:
$active = time() - 60 * 10 //Znam da je ovo 600 :) ali ako neko bude imao potrebu da poveca limit, znaci stavlja se vrijednost u sekundama.
$query = mysql_query("select username from user_profiles where lastactivity <= '$active' order by lastactivity desc") or die(mysql_error());
$broj_online_korisnika = mysql_num_rows($query);
//lista korisnika koji su online
while($item = mysql_fetch_array($query))
{
$user_list .= $item['username'] .' ';
}
print "Users online: $broj_broj_online_korisnika <br />";
print "Korisnici koji su online: ";
print $user_list;
Vrlo jednostavno i stedi resurse. Moje misljenje je da nema potrebe za odvojenom tabelom i da se u njoj cuvaju podaci kada je ko pristupio sajti a jos manje
za cronjob-om koji bi cistio tu tabelu...
Nadam se da ce ovaj kod nekome biti od koristi.
Pozdrav,
Sale