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() ?>