PHPWebmaster

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]

Related Articles

One Comment

  1. Güzel bir makale olmuş,

    Ayrıca oturum kapatma işleminde tarayıcının kapandığında, otomatik olarak oturumdan atmak istemeniz durumda oturum katmanı olarak SESSION kullanabilirsiniz.

    Session; tarayıcı penceresi kapandığı anda oturumdan sizi otomatik olarak atar, bir diğer oturum katmanı olan Cookie ise bilgisayar üzerinden log’landığı için pencere kapansa bile oturumdan atmaz.

    Session sunucu tarafından log’lanır ve saklı tutulur.

    Bu güzel faydalı yazı için teşekkür ederim.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Back to top button