otzidemajour adlı üyeden alıntı: mesajı görüntüle
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

İkinize de gerçekten ne kadar teşekkür etsem az hocalarım Çok detaylı ve anlaşılır şekilde anlatmışsınız. Nasıl yapacağım aklımda oturdu ve şimdi halledeceğim. Teşekkür ediyorum tekrardan. @gurbuzemre; hocamı da tekrardan konuya davet ediyorum, kendisi üstte bilgilendirmemi istemişti.

İyi akşamlar dilerim herkese