Bir sayfa yenilemesi ve bir sayfayı kapatmadan arasındaki farkı anlatmak için nasıl

4 Cevap php

Oyunda ben bir kullanıcı sayfayı veya tarayıcı kapatır eğer, bunları otomatik olarak oturumu böylece sahip olmak isterken ben bir web uygulaması oyun var ve. Ben pencereye bağlı onbeforeunload olayı kullanarak çalıştı:

window.onbeforeunload = function() {
    // perform logout functions here
}

Sorun kullanıcı sayfayı yeniler eğer bu da ateş erecek. Ben kullanıcı tamamen tüm sayfayı kapatarak, ya da sadece serinletici olup olmadığını tespit bir yolu var mı?

4 Cevap

Saptanabilir bir fark yoktur. Otomatik olarak bir kullanıcı çıkış için, oturum açma veya oturum bilgilerini saklamak çerezinizle bir süre sonu ayarlamak gerekir. Eğer 1 saat için ayarlanmış Yani, kullanıcı aslında çerez yok olacağını beri süre sonra günlüğe olacaktır. Eğer onlar yine site ile etkileşim ise bu otomatik logout ertelemek istedim, çerez erme onlar eylem çeşit (bir AJAX çağrısı, vb aktive linki tıklayarak) yapmak her zaman sıfırlamak olabilir. Bu daha ne istiyorsun gibi geliyor giriş, sadece 1 saat aksine onlar hareketsizlik 1 saat sonra açmış olurdu anlamına gelecektir.

Eğer 0 çerez sona erme ayarlarsanız, o oturumu sona erdikten sonra sona erecek. Kullanıcı tamamen kendi tarayıcısını çıkar o zaman genellikle oluşur. O da başka bir seçenek.

Dediği gibi, bunu yapamazsınız. Daha da kötüsü, bu olay, pop-under ve böyle yaparak kötü amaçlı komut tarafından istismar edilmiş, muhtemelen, çünkü tarayıcıların sürü tarafından terk edilmiştir.

Olası geçici bir Ajax komut "telefon ev" sahip olmaktır: bir süre için sessiz ise, kullanıcı sadece siteyi (kapalı sayfa veya tarayıcı) terk.

Onunload olay oturumu n saniye (n bir sayfa yeniden isteği gerçekleşmesi için azami süre, bu yüzden belki 10 yerde) içinde sona neden olur sunucuya bir istek göndermek var. Sonra bu olay planlanmış ve eğer öyleyse, bunu iptal olup olmadığını görmek için site kontrol için komut dosyası var. Bu size istediğiniz gibi davranışı verecek.

Ama evet, ben sadece sona oturumu olan tavsiye ederim.

Ben eğer yanılmıyorsam JavaScript onWindowClose gibi bir şey adında bir işlevi olmalı, belki de bunun için aramayı deneyin?

PHP çözümleri ile ilgili, ben eğer varsa emin değilim ama özellikle () connection_aborted ve register_shutdown_function () işlevleri, PHP Connection Handling içine hızlı bir göz atın öneririz.