Kullanıcı PHP sayfasını kapalı olmadığını kontrol edin?

8 Cevap javascript

PHP ve JavaScript kullanarak sohbet bir sohbet yaptı ve ilk kullanıcı listeden onu çıkarmadan sohbet kullanıcı kaldırır bir kesme düğmesi vardır. Kullanıcı tarayıcıyı kapatır Ama eğer o kullanıcı listesinde kalır. O gittikten olmadığını nasıl kontrol edebilirim?

Kullanıcı tarayıcıyı öldürürse o sohbette kalır çünkü bu JS without putting any handles on page closing yapılmalıdır.

By the way , JS script always sends a request to the PHP page which constantly checks for new messages in a loop and when there are some, the script prints them out and exits. Then it repeats all over again.

EDIT : How do I make a heartbeat thing in PHP? If a user closes the page the script execution will be terminated therefore we won't be able to check if the user is still connected in the same script.

8 Cevap

Eğer sunucuya her 5 saniyede bir küçük ajax arama gönderebilir. ve bu yapmaz, kullanıcıların daha fazla odada değil

Kendi sorusunu yanıtladı: Zaman (daha bir kaç saniye) belirli bir uzunluk boyunca bir kullanıcıdan yeni iletiler için bir istek tespit yoksa, o zaman odadan çıktı.

HTTP doğası bazı iletişim AJAX tür yapmak gerektiğini belirler. Eğer "Bana daha mesaj vermek" isteği (eğer istemem neden emin değilim) için dinlemek istemiyorsanız, o zaman bir kalp atışı tür iletişim kurmak.

Nedense JS kodunu değiştirmek yapamıyorsanız, gerçekten yapabileceğiniz az. Eğer can PHP ile yapılacak tek şey son etkinlik 15 dakika içinde, örneğin orada eğer, kullanıcı bıraktı kontrol etmektir. Ama bu hiçbir şekilde yapmak için akıllı bir şey - Bir kullanıcı sadece oturmak ve 15 dakika boyunca konuşmayı izlemek olabilir.

Eğer güvenilir bir şekilde bunu yapmak istiyorsanız yapmanız tek doğru yolu belirli aralıklarla AJAX yoklama kullanıyor.

Kullanıcı ayrıldıysa bir kullanıcı yoklar yeni iletiler için sunucu sürekli algılamak için kullanabilirsiniz olamayacağını kaydetti?

Sunucuda aktif kullanıcıların bir listesini, hem de onlar yeni mesajları istemek için sohbet bağlı son kez koruyun.

Bir kullanıcı güncellemek mesajlar için zaman kontrol etmek bağlar.

Kod çalışır bu listede yineleme ve çok uzun bağlı olmayan kullanıcıları kaldırmak her zaman.

Tek hatası kanalda kullanıcı sayısı sıfıra düşerse, sunucu farketmeyebilirsiniz biri kadar geri gelmesidir.

Katkınızı gidermek için, ignore_user_abort kullanarak istemci sonlandırma göz ardı edebilirsiniz.

Javascript u takip yapabilirsiniz kullanma:

<script type="text/javascript">

window.onunload = unloadPage;

function unloadPage()
{
 alert("unload event detected!");
}
</script>

PHP Script ur unloadPage () fonksiyonu gerekli ajax arama yapmak

AJAX ile bu gibi küçük bir şey, gider bir PHP komut dosyası isteyin:

register_shutdown_function("disconnect_current_user");
header('Content-type: multipart/x-mixed-replace; boundary="pulse"');

while(true) {
   echo "--pulse\r\n.\r\n";
   sleep(2);
}

Bu şekilde, sürekli olarak açma / kapama bağlantıları olmayacaktır.

OP tarafından sorulan tüm soruların cevapları bağlantısı kullanımı hakkında kılavuzda bölümünde kaplıdır:

http://uk3.php.net/manual/en/features.connection-handling.php

Ajax yok.

Hiçbir Javascript.

Hiçbir canlı tutma.

C.