Kuvvet Çıkış kullanıcılar kullanıcıların zaman belirli bir süre için etkin değilse

7 Cevap php

Eğer bir bankacılık uygulaması yaptığını varsayalım. Kullanıcıların siteye giriş yapıyorsanız, nasıl kendi hareketsizlik algılamak ve bir süre hareketsiz kalırsa oturumu için onlara sormak? Inaktif burada onlar diğer sekmelere geçiş, ya da tarayıcı uygulamasını dokunmadan ya var demektir.

Ben kullanıcılar benim uygulama HER sayfasında yapıyorsun zaman her fare hareketi veya klavye hareketlerini kaydedip bunu düşünüyorum sanırım. Ancak kod çok çirkin ve korumak zor olurdu. Bunu yapmanın diğer daha şık bir yolu var mı?

7 Cevap

Kullanıcı düzenli olarak sunucudan yeni sayfalar / veri isteyen, daha sonra PHP oturum zaman aşımı süresini ayarlama (PHP oturumları kullanarak varsayarak) Bunun için çalışması gerekir.

Endişe, (örneğin, uzun bir form doldurarak) sunucuya hiçbir geziler ile zaman iyi bir uzunluk için bir sayfa üzerinde oturuyor olabilir, ve bu ayırt etmek istiyoruz ve kullanıcı sadece başka bir pencereye geçiş, bunu ise canlı oturumu tutmak için XMLHttpRequest her beş dakika kadar kullanarak bazı verileri istemek için javascript kullanmak gibi bir şey yapabilirdi. Bu mekanizmayı durdurmak ve yeniden başlatmak için javascript olarak windowFocus ve window.onblur olayları kullanabilirsiniz (IE için bazı farklılıklar olduğunu düşünüyorum, orada iyi bir açıklama here).

Merhaba Beyler bu kullandığım koddur. Benim değil ama en 'mükemmellik' bunu değiştirmek yaptı.

// Add the following into your HEAD section
var timer = 0;
function set_interval() {
  // the interval 'timer' is set as soon as the page loads
  timer = setInterval("auto_logout()", 10000);
  // the figure '10000' above indicates how many milliseconds the timer be set to.
  // Eg: to set it to 5 mins, calculate 5min = 5x60 = 300 sec = 300,000 millisec.
  // So set it to 300000
}

function reset_interval() {
  //resets the timer. The timer is reset on each of the below events:
  // 1. mousemove   2. mouseclick   3. key press 4. scroliing
  //first step: clear the existing timer

  if (timer != 0) {
    clearInterval(timer);
    timer = 0;
    // second step: implement the timer again
    timer = setInterval("auto_logout()", 10000);
    // completed the reset of the timer
  }
}

function auto_logout() {
  // this function will redirect the user to the logout script
  window.location = "your_logout_script.php";
}

// Add the following attributes into your BODY tag
onload="set_interval()"
onmousemove="reset_interval()"
onclick="reset_interval()"
onkeypress="reset_interval()"
onscroll="reset_interval()"

Goo şanslar

Richard

Bunu yapmanın çok kolay ve etkili yolu HTML HEAD bölümünde böyle bir şey yerleştirerek gereğidir:

<META HTTP-EQUIV="refresh" CONTENT="1800;URL=logout.php?timeout">

Zaman aşımı sorgu dizesinde ise?, Onlar Hareketsizlik nedeniyle dışarı açmış oldum belirten bilgi ile onlara bir giriş sayfası göstermek, yukarıdaki örnekte uygun komut .. ile logout.php? Aşımını değiştirin.

Onları otomatik olarak çıkıyor önce hareketsiz kalmak için izin isteyen o saniye süre ile 1800 değiştirin. Eğer oturum sona erme için ayarlanmış olması aynı zamana ayarlayın.

Düzenleme - uygulanması için başka kolay mekanizma bir oturum last_time adlandırılan değişken veya last_activity, ya da bu doğrultuda bir şey var, ve aktivite olduğu bir zaman damgası her şey için ayarlamaktır. Eşyalarımın çoğu, ben genel bir ben aynı dosyanın içeri Bunu yapmak içerme dosyası var, bunu etkin bir oturumu için belirlenen ettik kısıtlamaları içinde olduğundan emin olmak için kontrol edebilir. Çok uzun zaman oldu - sadece yapmak 300 çıkış sayfasına yönlendirmek ve orada uygun hareketsizlik mesaj görüntüleyebilir.

İyi şanslar!

Ian

Onlar ilk etapta "oturum" nasıl bağlıdır. Sunucuda oturum sona erme sizin için yapmaz? Eğer gerçekten elle yapmak istiyorsanız, o zaman bir setTimeout bazı javascript kullanmak, ama çirkin şu olabilir

Genellikle oturum ömür boyu Bir kullanıcı veya oturum olup olmadığını belirlemek için kullanılır. Yani bu devleti temsil oturumda bir bayrak ayarlayabilirsiniz. O (kullanıcı henüz giriş yapmadıysanız ya da oturum zaman aşımına uğradı ya) eksik eğer yapmadınız gibi, o kabul edilir

Sen kullanıcının son etkinlik ne zaman görmek için her x dakikada sunucusunu denetler javascript biraz olabilir. Kod birkaç satır daha fazla olmamalıdır. Kullanıcı javascript engelli varsa ben de bir meta yenileme eklersiniz.

Biz şimdi jquery bizim kodları artırabilir


idleTime = 0; $(document).ready(function() {

var idleInterval = setInterval("timerIncrement()", 60000); // 1 minute //60000
$(this).mousemove(function(e) {
    idleTime = 0;
});
$(this).keypress(function(e) {
    idleTime = 0;
});

});

fonksiyonu timerIncrement () {

idleTime = idleTime + 1;

if (idleTime >= 5) {
   window.location = $('#base_url').val() + 'home/logout_user';
}

}