2016-03-29 4 views
-1

Я написал блок кода, чтобы определить, вошел ли пользователь в систему, и их сеанс не был отключен. Если они не вошли в систему или они неактивны, они отправляются на страницу logout.php, которая обновляет базу данных и разрушает сеанс, а затем возвращает их на страницу входа.Как предотвратить выполнение PHP-кода после перенаправления заголовка?

Вопрос, который у меня есть, далее по странице - это код для выполнения различных действий, когда пользователь отправляет формы. Поскольку перенаправление header() - это фактически первый бит кода на странице, и я ожидаю, что сервер будет работать через код сверху вниз, это немного умудрит меня, если я удалю submit на форме и выйду из системы, потому что Я был неактивен, когда я возвращаюсь к внесенным изменениям. Этого не должно быть.

Код:

//check if the userID has been set (is set at login) 
if(isset($_SESSION['userID'])){ 
    //some code here to get variables from the DB 
    //then check that the last recorded activity was not more than x minutes ago 
    if(time() - $_SESSION['lastActivity'] < 1800){ 
     //update the $_SESSION['lastActivity'] variable 
    } else { 
     header('Location: logout.php'); //inactive, send to logout page 
    } 
} else { 
    header('Location: logout.php'); //not logged in, send to logout page 
} 

if(isset some post variable){ 
    //update database 
} 

Это последнее, если оператор не должен работать, если я не вошли в систему или не обновлять страницу в более чем 30 минут, но это делает. Может ли кто-нибудь помочь мне, почему и как его предотвратить? Я имею в виду, я знаю, что могу обернуть весь последующий код в условии if (isset ($ _ SESSION ['userID])), но это кажется громоздким, и, безусловно, первый блок кода должен иметь дело с пользователями, которые не вошли должным образом в систему?

Заранее спасибо

+2

** [exit()] (http://php.net/manual/en/function.exit.php) ** – andrew

ответ

1

У вас должен быть выход; на следующей строке после header();

+0

Как всегда, что-то невероятно простое. Спасибо. – MikeK

0

header("Location: ..."); только отправляет заголовок обратно клиенту, сообщая ему, куда идти. Он явно не отменяет выполнение текущего скрипта на сервере.

Вы должны всегда иметь exit; после любого header("Location: ...");, если вы не хотите, чтобы сценарий продолжался.