v2.5.2
Giriş yap

Php ile online offline kontrolü nasıl yapılır?

deadmonster
1,140 defa görüntülendi ve 4 kişi tarafından değerlendirildi

Php'de online offline kontrolü nasıl yapılır?
çoğu yazıda okuduğum (saçma bence) üye giriş yaparsa online = 1 yap çıkış yaparsa online = 0 yap.
Bu yöntemle olmaz, malum ki kimse kendi bilgisyarında çıkış yapmakla uğraşmaz, direk browserı kapatır. Bu durumda da jquery kullanarak bunu yapabileceğimi okudum ama nasıl yapıldığını anlatmamış. Sizce bunun yöntemi böyle mi olur yoksa unixtime kullanarak mı? Eğer unixtime ise mantığı nedir?

mek
1053 gün önce

Hocam bir süredir ben de bu konu hakkında çalışıyordum. Az önce tamamlayabildim. Hala test ediyorum, yaptığım sistem çok amatör bi o kadar da basit bir sistem daha gelişmişleri nodejs ile yapılabilir fakat böyle de çalışıyor. Zaman damgasıyla kullanıcı var mı yok mu varsa nasıl çevrimiçi tutabiliriz onu paylaşıyorum. Elimden geldiği kadar yapabildim. Sanada yardımcı olabilmek için kodlarımı paylaşıyorum.

Veritabanında user tablona "online" adında bir sütun oluştur. Daha sonra;
Kullanıcıyı sayfayı yenilediğinde oturum süresini uzatmak için bu kodları Header.php'ye kendine göre düzenledikten sonra yapıştır.
Kullanıcı adını ve Online durumunu istersen SESSION'a atayabilirsin. Ben henüz deneme/yanılma aşamasında olduğum için bir çok yeri düzenlemeden bıraktım. Henüz çakışmıyor bir hata ile karşılaşmadım. Karşılaşırsam haber veririm.

$username=$_SESSION['username'];
$_SESSION['online'];
$online=strtotime($_SESSION['online']);
$suan=time();
$fark=($suan-$online);
if ($fark>600) {
    $zamanguncelle=$db->prepare("UPDATE user SET
        online=:online
        WHERE username='$username'");
    $update=$zamanguncelle->execute(array(
        'online' => date("Y-m-d H:i:s")
    ));
    $_SESSION['online']=strtotime(date("Y-m-d H:i:s"));
}

Daha sonra kullanıcı login olduktan sonra ilk çevrimiçi kullanıcı olayını başlatmak için kullanıcıyı login ettiğin formun post olduğu sayfaya bu konu yapıştır.

$zamanguncelle=$db->prepare("UPDATE user SET
				online=:online
				WHERE username='$username'");
$update=$zamanguncelle->execute(array(
				'online' => date("Y-m-d H:i:s")
			));
$_SESSION['online']=strtotime(date("Y-m-d H:i:s"));

Son olarak çevirimiçi kullanıcıları listelemek için paylaştığım kodu kendine göre düzenleyip, kullan.

$ten_minutes_ago = time() - (60 * 10);
	$datetime = date("Y-m-d H:i:s", $ten_minutes_ago);

	$dm=$db->prepare("SELECT * FROM user WHERE online >= '$datetime'");
	$dm->execute();

	while($dups=$dm->fetch(PDO::FETCH_ASSOC)) {
	
	           echo $dups['username']; 
	           echo '<br>';
	        
	}