Share
Ağustos 19, 2018

PHP – Sekme ve ya Tarayıcıyı Kapatınca Otomatik Çıkış Yaptırma ( Otomatik Logout )

Php’de herhangi bir üyeyi sistemden çıkış yaptırdığımızda sessionlarda sorun yaşamıyoruz fakat üyenin tarayıcının sekmesini kapatması ve ya tarayıcıyı komple kapatması durumunda sistemdeki diğer üyelere online olarak gözükmektedir. Bunu çok basit birkaç kod ile çözebiliyoruz.

Öncelikle zamanı kontrol etmek için 2 adet javascript dosyası oluşturmamız gerekiyor. Aşağıdaki javascript dosyası ile veritabanımızdaki zaman sütununu güncelleyebiliyoruz.

update.js

setInterval(function(){ 
    $.ajax({
    url: "/update.php?userid=45",
    success: function(response){
        console.log(response);
        }
    });
},10000);

Aşağıdaki javascript ile son zaman izi ile şimdiki zaman arasında geçen zamnı kontrol ediyoruz.

check.js

setInterval(function(){
    $.ajax({
        url: "/check.php",
        success: function(response){
            console.log(response);
        }
    });
}, 10000);

Buradaki örneklere göre user id’si 45 olan kullanıcı giriş yapmış olarak gösteriliyor ve her 2 javascript 10 saniyede bir çalışıyor. Veritabanındaki zaman sütunu periyodik olarak kontrol edilip güncellenecek. Her iki javascript dosyası için zaman aralığı 10 saniye olduğu için check.js için zaman boşluğu her zaman 60 saniyeden az olmalıdır çünkü update.js dosyası periyodik olarak 10 saniye sonra güncelleniyor.

update.php

<?php
    $uid = $_GET["userid"];
    $query = "UPDATE TABLENAME SET TIMESTAMP = GETDATE() where user_id = $uid";
    $status = mysqli_query($query, $con);
    echo "updated !";
    exit;

Şimdi user id’si 45 olan üyenin siteden çıkış yap butonunu kullanmadan sekmeyi ve ya tarayıcıyı kapatarak çıktığını varsayalım. Diğer tüm üyeler 1 dakika boyunca 45 id’li üyeyi online olarak görecekler. Tüm üyelerde aynı javascript dosyası çalıştığı için 1 dakika sonra veritabanındaki zaman sütunu güncellenecek ve şimdiki zaman , son zaman değerinden farklı olacağından artık sekmeyi ve ya tarayıcıyı kapatarak çıkan üyede bu javascript çalışmadığı için bu üyeyi offline olarak görecekler.

check.php

<?php
    $query = "SELECT TIMESTAMP FROM TABLENAME WHERE (GETDATE() - TIMESTAMP) > 60";
    $result = mysqli_query($query, $con);
    while($row = mysqli_fetch_assoc($result)){
        $uid = $row["user_id"];
        mysqli_query("UPDATE TABLENAME SET STATUS = 'offline' WHERE USER_ID = '$uid'");
    }
exit;
[alert-note]Bu içerik linki verilen kaynaktan çeviri yaparak oluşturulmuştur. http://javascriptsolution.com/php-auto-logout-when-browser-or-tab-is-closed/[/alert-note]