anladım. 20-30 user problem değilmiş, bol bol mysql query'si kullanabilirsiniz.
1- users tablonuza last_ping_timestamp diye sütun açın.
2- kullanıcı online'ken her dakika başında js ajax ile sizinsiteniz.com/ping.php adresine POST istek yollayın, içinde kullanıcının id'si olsun
3-
ping.php dosyasında kullanıcının id'si ile UPDATE users SET last_ping_timestamp = $unixTime WHERE user_id = $_POST['user_id'] komutunu calıstırın
4- sunucunuza bi tane cronjob kurun. her 60 saniyede 1 kez otomatik çalıştırsın addUserPoints.php dosyasını.
5- bu addUserPoints.php dosyasında kullanıcıların hepsini seçip foreach döngüsü içerisinde sokacaksınız, şu anki timestamp'i alıp öncekiyle karşılaştıracaksınız.
6- şu anki timestamp'ten, last_ping_timestamp'i (bunu nasıl yapacağınızı aşağıda anlatıyorum) çıkarırsanız kullanıcının en son online bildirimi verdiğiyle şu anki vakit arasındaki farkı görürsünüz.
7- timestamp'i saniyeye dönüştürün
8- eğer son 60 saniyede online ise (bence scriptin yavaş çalışma ihtimalini de göze alıp 70 falan yapın), kullanıcıya xp'sini verin 1dk için 1 xp olacak şekilde.
Peki 2 timestamp farkını nasıl alırız saniye olarak?
<?
[COLOR=var(--highlight-variable)]
$datetime1[/COLOR] = [COLOR=var(--highlight-keyword)]
new[/COLOR] DateTime([COLOR=var(--highlight-variable)]
'2016-11-30 03:55:06'[/COLOR]);
[COLOR=var(--highlight-variable)]
$datetime2[/COLOR] = [COLOR=var(--highlight-keyword)]
new[/COLOR] DateTime([COLOR=var(--highlight-variable)]
'2016-11-30 11:55:06'[/COLOR]);
[COLOR=var(--highlight-variable)]
$interval[/COLOR] = [COLOR=var(--highlight-variable)]
$datetime1[/COLOR]->diff([COLOR=var(--highlight-variable)]
$datetime2[/COLOR]);
[COLOR=var(--highlight-variable)]
$intervalSeconds = $interval[/COLOR]->format([COLOR=var(--highlight-variable)]
'%s seconds'[/COLOR]);
bu kadar

sonra ufak bir IF
<?
if ($intervalSeconds < 65)
{
$user->addXpPoints();
}
else
{
//user is offline
//bu noktada isterseniz db'ye 'is_online' diye sütun falan ekleyip onu 0 olarak setleyerek, bir dahaki cronjob calıstığında, online değilse hiç durduk yere çalıştırmayabilirsiniz baştaki foreach'i.
//ama 20-30 kullanıcı hiç sorun olmaz zaten. 4-5k olunca problem edersiniz bunları.
}fikir vermesi amacıyla object oriented düşünerek yaptım. bu fikri projenize evirip çevirip koyabilirsiniz. belki hatam da olmuştur