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