PHP/MySQL ile online ziyaretcileri listeleme
Sitemizdeki online ziyaretçilerileri listelemek için sadece her ziyaretçiye ait session id’ leri veribanımıza kaydetmemiz ve session_id’ lerin istenilen zaman aralığında olup olmadığını kontrol etmmemiz yeterlidir. (örn, 10 dakika)
Önce MySQL “online_ziyaretci” tablosu oluşturalım.
CREATE TABLE IF NOT EXISTS `online_ziyaretci` (
`sessionno` varchar(100) NOT NULL,
`zaman` int(40) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
İlk önce kimOnline() işlevimizi oluşturalım. Bu işlev sitemizin ana sayfasında her ziyaretçinin session no’sunu veritabanına yerleştirecek, eğer session no’ su veritabanında mevcutsa güncelleyecektir.
// veritabanı bağlantısını yapmayı unutmayın
function kimOnline($sesid){
global $mysqli;
// veritabanına yerleştir veya güncelle
$sql = "INSERT INTO online_ziyaretci (`sessionno`, `zaman`) VALUES('".$sesid."', '".time()."')
ON DUPLICATE KEY UPDATE sessionno='".$sesid."',`zaman`='".time()."'";
$mysqli->query($sql);
// ziyaretci session' i sona erdiyse veritabanından kaldır
KullanicilariKaldir();
}
/*
Bu işlev ziyaretçi session' ının sona erip ermediğini kontrol eder.
Eğer session 15 dakikadan evvelse silinir.
*/
function KullanicilariKaldir(){
// veritabanı bağlantısını yapmayı unutmayın
global $mysqli;
$zaman = time() - 900; // 900=15 dakika
$mysqli->query("DELETE FROM online_ziyaretci WHERE zaman < ".$zaman); //
}
Kullanımı:
Ana sayfanıza aşağıdaki kodu kopyalamanız yeterlidir.
<?PHP session_start(); // Eğer session id değişmezse session_regenerate_id() php işlevini kullanın. Bu işlev session id'i yenileyecektir. //session_regenerate_id(); kimOnline(session_id()); ?>
Yukarıda ki işlevler ile ziyaretçilerimizi veritabanımıza kaydetdik. Bu kaydedilen verileri site kullanıcılarına veya yönetici sayfamızda listelemek için aşağıdaki gibi bir işlev kullanabiliriz.
// Bütün kullanıcıları liste halinde göster
function butunZiyaretcilariListele(){
global $mysqli;
$query ='SELECT * FROM online_ziyaretci ORDER BY zaman DESC';
$results = $mysqli->query($query);
$ret ='';
while($row=$results->fetch_array()){
$ret .= '<div>'.$row['sessionno'].' '.date("d/m/Y H:i:s",$row['zaman']).'</div>';
/*
//Veritabanınızdaki kullanıcıları kontrol için
if (kullaniciOnline($row['kullanici_no'])){
$ret .= '<div class="online"></div>';
} else {
$ret .= '<div class="offline"></div>';
}*/
}
return $ret;
}
Kullanımı:
İstediğiniz bir sayfaya aşağıdaki kodu kopyalayın.
<?PHP echo butunZiyaretcilariListele() ?>
