Mantığı kısaca özetlemek gerekirse, bir online kullanıcılar tablosu olacak. Bir kullanıcı giriş yapıp sitede dolaştığı sürece veritabanına "bu saatte online idi" diye kaydedilecek. Çevrimiçi kullanıcıları görmek istediğimizde ise, şu andan örnek veriyorum beş dakika öncesine kadar hareket etmiş kullanıcıların listesini çıkarttıracağız. Olayımız bu kadar basit.
Önce veritabanı ile başlayalım. Bir veritabanı ve kullanıcı tablosuna sahip olduğunuzu varsayıyorum. Ekstra olarak "online" diye bir tablo oluşturacağız.
Tabloda hangi kullanıcının ne zaman hareket ettiğini göreceğiz.
Kullanıcının giriş yaptığı sırada, şöyle bir sorgu çalıştırılır:
<?php
$time = time();
$user_id = $user["id"]; // giriş yapan kullanıcının id'sini kaydettik
mysql_query("INSERT INTO online(time, user) VALUES('$time', '$user_id')");
?>
"time" değişkeni "1364161976" gibisinden bir değer aldı şimdi, bu sayı her saniye artıyor. Kullanıcı her hareket ettiğinde yukarıdaki sorgu çalıştırılacak. Böylece kullanıcı çıkış yapana dek onu takip etmiş olacağız.
<?php
$dakika= time()-60;
$time = time();
$query = mysql_query("SELECT user FROM online WHERE time<$time AND time>$dakika");
?>
Diyelim kullanıcı giriş yaptıktan sonra 1 dakika boyunca hiç bir işlem yapmazsa o kullanıcının oturumu otomatik olarak kapanıyor. Bu durumda yukarıdaki "dakika" değişkeni gibi bir değişken tanımlayacaksınız ilk önce. ben şu anki zamandan 60 saniye çıkararak bir dakika önceye ulaştım. Alttaki sorguda online tablosunda bu zamandan, 60 saniye öncesine kadar kimler çevrimiçi kalmış onu bulmuş oluyoruz.
Oturumu kapananların kaydını silmek için, Yukarıdaki mysql sorgusunu terse çevirip sorguyu "delete" sorgusuna çevirebilirsiniz.
Not: bi yanlışım falan varsa kusura bakmayın, düzeltirim bi ara.