Oturum Times dışarı veya boşta gider otomatik olarak yeniden doğrudan kullanıcı

3 Cevap php

Ben bir php session ($ _SESSION) zaman aşımına algılamak için, sayfa (javascript) her 3 dakikada bir çalışacak giden bir zamanlayıcı istiyorum ... ve eğer öyleyse, otomatik olarak onları yönlendirmek.

Iyi bir örnek olmak bir kullanıcı günlükleri ve merdivenlerden yukarı çalışır ve geri geliyor asla ... Ben basit bir yönlendirme ile javascript onları oturum açmak istiyorum ...

Bu mümkün mü? ve ben böyle bir şeyi nasıl yapar? Ben PHP ve javascript kullanıyorum.

Edit: What Rob said below is exactly what I am looking for... and I safely \'quote \'...

I suspect what Mike is asking for is that when the session times out, the browser should be told to navigate away from the current page. Some banks do this after a period of inactivity, for example. – Rob Kennedy 5 hours ago

3 Cevap

Sen kullanabilirsiniz basit bir meta refresh:

<meta http-equiv="refresh" content="180;url=http://example.com/logout" />

Ya PHP ile bir zaman aşımı uygulamak:

session_start();
if (isset($_SESSION['LAST_REQUEST_TIME'])) {
    if (time() - $_SESSION['LAST_REQUEST_TIME'] > 180) {
        // session timed out, last request is longer than 3 minutes ago
        $_SESSION = array();
        session_destroy();
    }
}
$_SESSION['LAST_REQUEST_TIME'] = time();

Sonra oturumu hala geçerli olup olmadığını her 3 dakikada bir kontrol etmek gerekmez.

New and improved solution

Mr kennedy işaret olarak benim özgün çözüm (aşağıda) çalışmıyor. işte bunu yapmak için bir yoldur.

Kullanıcı veritabanında bir kullanıcı bir sayfayı yükler her zaman güncellenen bir son etkinlik damgası tutmak.

Daha sonra checkaccess.php içinde

if ( time-last_access > max_inactivity_time ) {
     return array('access' => '0');
}
else {
     return array('access' => '0');
}

Javascript zamanlayıcı (aşağıda) checkaccess.php aramak ve buna göre çıkış

Bu aynı zamanda bir "an oturum açmış kullanıcılar" fonksiyonu sağlar

teşekkürler mr kennedy


Original, non-working solution

Geçerli kullanıcıların oturum geçerliliğine dayanarak 1 veya 0 döndüren bir php sayfa oluşturmak

Sonra kafasına bu eklemek zaman aşımı istediğiniz sayfaları (jQuery gerekir)

setInterval(function(){
   var url = UrL_OF_SESSION_CHECKING_PAGE;
      $.getJSON( url,
         function( data ) {
            if (data.access=='0') {
               window.location = LOGIN_PAGE;
            }
         }
      );
}, 180000);

Her 180 saniye (3 dakika) bu php sayfasını ister ve oturumun geçerliliğini alır. Onun geçersiz Eğer bir giriş sayfasına yönlendirir

Kullanıcı birden fazla sayfa açmak ise sayfalar zaman aşımı ve onların sayaçları farklı olduğu için farklı zamanlarda yönlendirmek.

Here's a good page on javscript timers http://ejohn.org/blog/how-javascript-timers-work/

Basit bir oturum kontrol sayfası

session_start();
die(
    json_encode(
        isset( $_SESSION['VARIABLE'] ) ? array( 'access' => '1') : array( 'access' => '0' )
    )
);

Lütfen oturum değişkenleri birine değişkeni değiştirebilir

Eğer sayfa bile yenilenmeden önce bu ne istiyorsanız, periyodik ajax aramaları isteyeceksiniz. Sen jQuery Heartbeat çağrısını her 3 dakikada bir yapmak için kullanabileceğiniz ve oturumu kontrol etmek için zaten diğer kullanıcılar tarafından sağlanan PHP yöntemlerden birini kullanabilirsiniz