2015-02-11 3 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

+0

http://stackoverflow.com/questions/520237/how-do-i-expire-a-php-session-after-30 -minutes –

ответ

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(), если вы хотите его проверить после каждые 1 минута.

$(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

+1

Yep, Edited .. :) – void

+0

Этот ответ суммирует его просто JOB, единственное, что вы можете сделать позже, - это начать использовать JSON так вы можете отправлять и получать параметры обратно вперёд, используя json_encode() – Mayhem

1

Вы не можете сделать это с помощью PHP. Вам нужно посчитать время в javascript и после этого сделать ajax-запрос. Самый простой способ - использовать плагин jQuery, например IdleTimeout.

0

PHP код должен быть вызван/запустить для выполнения ... Это обыкновение работать в фоновом режиме, если что-то не работает это ..

У вас есть несколько вариантов:

1: Ajax как предложил Shikhar .. Вы должны иметь что-то вроде SetTimeout в JavaScript, который бы назвал это каждую минуту или как никогда часто

2: хрон ... но хрон, который проверяет каждый активный файл сеанса и если он истек, то вы просто удаляете он (Убивает сеанс)

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.

Смежные вопросы