PHP: использование exit (); или умереть(); после заголовка («Местоположение:»);

У меня есть система входа / регистрации пользователя, которая просто использует

// execute queries, set cookies, etc. here header("Location: " . getenv("HTTP_REFERER")); 

Недавно я прочитал сообщение о exit(); и die(); и не подозревал, что я должен использовать их. Насколько я понимаю, они заканчивают PHP? Это верно? Каким образом я могу работать над этим, просто добавив одну из этих функций сразу после header (); исполнение у меня есть?

У меня есть AJAX, чтение jQuery через мой login.php / register.php, это повлияет каким-либо образом?

Изменить: иначе, чем после header () ;, где еще я должен использовать usitilizing exit(); или die(); функции? И есть exit(); больше используется в PHP, тогда как die(); больше используется в Perl?

Я тоже искал ответ на этот вопрос. Что я нашел:

Почему die () или exit ():

Если вы не ставите die () или exit () после своего header('Location: http://something') ваш скрипт может продолжать приводить к неожиданному поведению. Это может привести, например, к раскрытию содержимого, которое вы действительно хотели предотвратить с помощью перенаправления (HTTP 301). Вышеупомянутый не может быть непосредственно видимым для конечного пользователя, поскольку браузер не может его отобразить (из-за 301). Вывод: функции exit () и die () останавливают выполнение сценария.

Разница:

Я также хотел узнать разницу между функциями, поскольку, кажется, их нет. Однако в PHP существует отличная разница в выходе заголовка. В приведенных ниже примерах я решил использовать другой заголовок, но для того, чтобы показать разницу между exit () и die (), это не имеет значения.

Exit () в действии

 <?php header('HTTP/1.1 304 Not Modified'); exit(); ?> 

Результаты в:

 HTTP/1.1 304 Not Modified Connection: Keep-Alive Keep-Alive: timeout=5, max=100 

Die () в действии

 <?php header('HTTP/1.1 304 Not Modified'); die(); ?> 

Результаты в:

 HTTP/1.1 304 Not Modified Connection: close 

разница

Итак, die () закрывает соединение, а exit () – нет. Это зависит от производительности, независимо от того, хотите ли вы открыть соединение или закрыть его. Оба имеют преимущества и недостатки и зависят от ваших конкретных требований.

HTTP-постоянные соединения в Wiki

http://php.net/manual/en/function.exit.php

http://php.net/manual/en/function.die.php

Эти функции используются для прерывания выполнения сценария. Вам нужно использовать exit или die чтобы остановить выполнение вашего скрипта после header("Location: " . getenv("HTTP_REFERER")); , потому что, в другом случае, ваш скрипт будет выполнен до конца, что может привести к неожиданному поведению.

Ответ уже принят, но кажется, что у всех отсутствует вопиющая WTF в вопросе:

 header("Location: " . getenv("HTTP_REFERER")); 
  1. Возврат референта необязателен со стороны пользовательского агента

  2. его можно легко подделать

  3. нет способа сообщить пользователю, что логин не удался

  4. нет семантической связи HTTP с ошибкой аутентификации

  5. в то время как переменная среды HTTP_REFERER должна быть такой же, как переменная заголовка запроса, она не указана в RFC 3875, поэтому даже там, где она представлена ​​веб-серверу в запросе, getenv («HTTP_REFERER») может возвращать другое значение

Когда header() вызывается в конце скрипта, нет необходимости вызывать exit() или die() поскольку:

Ссылка на сервер будет закрыта, как только выполнение скрипта закончится, если только оно не закрыто раньше, явно вызвав mysql_close (). – php.net/function.mysql-connect

Хорошо, прошло много времени с момента последнего ответа. Во всяком случае: D как-то я наткнулся на подобную проблему и посмотрел, что мое решение было:

 die( Header( "Location: mytarget.php?arg1=foobar" ) ); 

Две птицы с одним камнем, похоже, работают на меня.