У меня есть система входа / регистрации пользователя, которая просто использует
// 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 () после своего header('Location: http://something')
ваш скрипт может продолжать приводить к неожиданному поведению. Это может привести, например, к раскрытию содержимого, которое вы действительно хотели предотвратить с помощью перенаправления (HTTP 301). Вышеупомянутый не может быть непосредственно видимым для конечного пользователя, поскольку браузер не может его отобразить (из-за 301). Вывод: функции exit () и die () останавливают выполнение сценария.
Я также хотел узнать разницу между функциями, поскольку, кажется, их нет. Однако в PHP существует отличная разница в выходе заголовка. В приведенных ниже примерах я решил использовать другой заголовок, но для того, чтобы показать разницу между exit () и die (), это не имеет значения.
<?php header('HTTP/1.1 304 Not Modified'); exit(); ?>
Результаты в:
HTTP/1.1 304 Not Modified Connection: Keep-Alive Keep-Alive: timeout=5, max=100
<?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"));
Возврат референта необязателен со стороны пользовательского агента
его можно легко подделать
нет способа сообщить пользователю, что логин не удался
нет семантической связи HTTP с ошибкой аутентификации
в то время как переменная среды 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" ) );
Две птицы с одним камнем, похоже, работают на меня.