Заголовок PHP перенаправляет проваливающиеся операторы if - PullRequest
2 голосов
/ 24 августа 2011

У меня есть код для регистрации количества попыток ввода пароля, который выглядит следующим образом:

<?php
/* Access denied */
$_SESSION['error'] = "invalidlogin";

if (isset($_SESSION['tries']))
{
    if ($_SESSION['tries'] == 5)
    {
        //TODO: Redirect somewhere nicer and more descriptive
        header("location:/index.php");
    }
    else
    {
        $_SESSION['tries']++;   
    }
}
else
{
    $_SESSION['tries'] = 0; 
}

header("location:/login.php");
?>

Я знаю, что он считает до пяти, а затем останавливается, потому что я проверил это, повторив $ _SESSION ['error'] в login.php

PHP никогда не перенаправляет при попадании

header("location:/index.php");

Но он всегда продолжает идти и затем перенаправляет на

header("location:/login.php");

Как заставить PHP перенаправить, как только он достигнет перенаправления index.php?

Должен ли я просто установить логическое значение после перенаправления index.php и проверить его в перенаправлении login.php?

РЕДАКТИРОВАТЬ: Чтобы уточнить, я уже определил session_start (); не беспокойся об этом.

Ответы [ 5 ]

8 голосов
/ 24 августа 2011
header("location:/index.php");
exit();
4 голосов
/ 24 августа 2011

Перенаправление вступает в силу только после того, как оно было отправлено в браузер клиента, и браузер инициирует новый запрос (который завершает текущий запрос).Простой вызов header () не инициирует перенаправление - ваш скрипт будет работать до тех пор, пока он не завершится нормально, соединение не будет закрыто, и веб-сервер не завершит работу скрипта, или вы явно не прекратите выполнение.

, если вы хотитеЗаголовок перенаправления вступает в силу немедленно, необходимо прервать выполнение сценария, что приводит к сбросу всех ожидающих результатов (включая заголовок перенаправления):

header("Location: ...");
exit();
1 голос
/ 24 августа 2011

Согласно PHP Docs рекомендуется звонить exit(); после вызова header();

0 голосов
/ 24 августа 2011

u Забыл начать сеанс !!!! используйте выход или умрите после заголовка ("location: /index.php"); не продолжать отдыхать

0 голосов
/ 24 августа 2011

Прежде всего, весь ваш метод несовершенен.Вы не должны делать перенаправление при сбое входа в систему, это может вызвать проблемы с безопасностью.Вы должны следить за тем, чтобы ваш скрипт включал правильную подстраницу в тот же запрос.

Хотя, технически, ответ на ваш вопрос, как уже было сказано, заключается в использовании exit ().

...