2015-02-11 112 views
0

我正在用PHP,JavaScript和HTML編寫項目。當用戶空閒1分鐘時,我已成功完成自動註銷。但問題在於我必須刷新頁面才能執行並註銷。PHP自動註銷,無需刷新頁面

有人可以幫助我,以便立即1分鐘結束,用戶閒置,代碼將被執行,它會帶我到登錄頁面而無需刷新它?

這裏是我的代碼:

// check to see if $_SESSION['timeout'] is set 
if(isset($_SESSION['timeout'])) { 
$session_life = time() - $_SESSION['timeout']; 
if($session_life > $inactive) 
    { 


echo"<script type='text/javascript'> 
window.alert('Your Session got Expired'); 
</script>"; 
header("Location: logout.php"); 
} 
} 

$_SESSION['timeout'] = time(); 
//Continuation of other codes 
+0

如果你想顯示登出的頁面而不重新加載,你需要AJAX來做到這一點 – bluefog 2015-02-11 07:52:25

+0

http://stackoverflow.com/questions/520237/how-do-i-expire-a-php-session-after-30 - 分鐘 – 2015-02-11 07:52:56

回答

4

我想實現的最佳途徑是使用JS和PHP

的組合

check.php

if(isset($_SESSION['timeout'])) { 
$session_life = time() - $_SESSION['timeout']; 
if($session_life > $inactive) echo "0"; 

else echo "1"; 
} 

$_SESSION['timeout'] = time(); 

的.js

$(document).ready(function(){ 
    setTimeout(function(){ 
     $.get("check.php", function(data){ 
     if(data==0) window.location.href="logout.php"; 
     }); 
    },1*60*1000); 
}); 

或者只是把它包在setInterval(function(){},1*60*1000)代替setTimeout()如果您希望在之後每隔檢查一分鐘。

$(document).ready(function(){ 
setInterval(function(){ 
     $.get("check.php", function(data){ 
     if(data==0) window.location.href="logout.php"; 
     }); 
    },1*60*1000); 
}); 
+0

我建議把JS包裝在定時器/循環中,以滿足OP的要求 – Mayhem 2015-02-11 07:58:49

+1

是的,編輯.. :) – void 2015-02-11 07:59:48

+0

這個答案總結了簡單的作業,你稍後可能做的唯一事情就是開始使用JSON您可以使用json_encode() – Mayhem 2015-02-11 08:03:29

1

你不能做到這一點用PHP。你需要在javascript中計算時間並在此之後發出ajax請求。最簡單的方法可能是使用像IdleTimeout這樣的jQuery插件。

0

PHP代碼需要調用/運行時執行......它不會在後臺運行,除非有正在運行它..

您有幾種選擇:

1:阿賈克斯爲通過Shikhar的建議..你必須有在javascript像一個的setTimeout這將這個每分鐘怎麼過經常呼叫

2:cron作業 ...但是,檢查每一個活動會話文件中的cron作業和如果它已經過期,那麼你只需刪除它(殺死一個會話)

3:有一些其他的手段經常要檢查

即使上面加載的PHP文件的,有這樣做的沒有肯定的方式..

Cron job/PHP loading ..他們需要一個觸發器...和一個cron工作不會重定向你的用戶,他們的會話第二次過期。

您的唯一選擇是在定時器上使用ajax發佈到服務器,並檢查會話是否仍然有效,如果沒有,則一旦響應從PHP返回到ajax調用,則重定向。

但即使如此,一旦用戶已經登錄,如果他們禁用JS ...你不會得到任何重定向或檢查。

0

@JOB你需要觸發一個Ajax請求類似以下

<script type="text/javascript"> 
     jQuery(document).ready(function(){ 
      setInterval(function(){ 
       jQuery.ajax({ 
        url: 'http://localhost/your_script.php', 
        type: 'POST', 
        success:function(response){ 
         alert("You are logged out"); 
         return false; 
        } 
       }); 
      }, 1000); 
     }); 
    </script> 

每1秒之後,該腳本將檢查註銷的狀態並註銷用戶,如果用戶處於空閒狀態的時間由PHP腳本決定。