Является ли хорошей практикой использование мета-тегов обновления для перенаправлений вместо функции header () в php? - PullRequest
6 голосов
/ 25 декабря 2010

Мне приходится много использовать перенаправления в моих скриптах, например, после того, как пользователь входит в систему, мне нужно перенаправить их в область администратора и т. Д. Но я считаю неудобным всегда иметь функцию заголовка в самом верху,Так что, если я использую мета-теги обновления для своих перенаправлений, будет ли это что-то, что будет осуждено в соответствии с лучшими практиками, или это приемлемо?

function redirect($location) {
    echo "<meta http-equiv='refresh' content='0; url=$location' />";
}

Ответы [ 4 ]

10 голосов
/ 25 декабря 2010

Нет. В Википедии четко указано:

Мета-обновление - это нежелательный метод инструктирования веб-браузера автоматически обновлять текущую веб-страницу или фрейм через определенный промежуток времени .....

Мета-теги обновления имеют некоторые недостатки :

  1. Если страница перенаправляется слишком быстро (менее 2-3 секунд), использование кнопки «Назад» на следующей странице может привести к тому, что некоторые браузеры вернутся на страницу перенаправления, и перенаправление произойдет снова. Это плохо для удобства использования, так как это может привести к тому, что читатель «застрянет» на последнем веб-сайте.
  2. Читатель может хотеть или не хотеть быть перенаправленным на другую страницу, что может привести к неудовлетворенности пользователя или возникновению проблем с безопасностью.
1 голос
/ 25 декабря 2010

Я бы лично использовал функцию header (), тогда пользователю не нужно ждать загрузки другой страницы.

0 голосов
/ 25 декабря 2010

Это зависит от ваших потребностей.

Если вам необходимо перенаправить пользователя после входа в систему, то вы должны использовать перенаправление заголовка.

метаобновление не рекомендуется по причинам, указанным выше, но все же еслитребуется, вы можете использовать метаобновление.например, показ рекламы на вашем сайте, а затем через определенное количество секунд вы принудительно загружаете файл или перенаправляете на новую страницу.

Вот небольшой сценарий

PHP

* На странице 1011 * отображается форма входа в систему, после отправки этой страницы данные отправляются на clearn_login_form.php для очистки входных данных.clearn_login_form.php перенаправляет на validate.php, а затем validate.php перенаправляет на admin_area/admin_main.php.

Все это перенаправление выполняется на бэкэнде, и пользователь будет видеть только страницы login.php и admin_main.php, и если пользователь нажметкнопка возврата браузера вернется к login.php

META

В метаобновлении перенаправление выполняется на стороне браузера / клиента, что представляет угрозу безопасности, поскольку пользователи смогут видеть clear_login_form.php и validate.php в их URL.также, если они отбросят кнопку с admin_main.php, они придут к validate.php, откуда они будут снова перенаправлены на admin_main.php

. PHP безопасен и быстр и скроет некоторые важные имена файлов от пользователей, где метаданныеи пользователи могут делать атаки CSRF или Session hijacking (если они обнаружили какие-либо дыры)

Теперь вам нужно использовать заголовок на самых первых строках, это проблема для вас, для преодоления этой проблемы используйте функцию ob_start(),но обязательно ставьте exit() сразу после каждой команды заголовка.

Примечание: ob_start и header() в сочетании не являются хорошей практикой и сбивают с толку других программистов, которые работают над вашим кодом.Рекомендуется использовать заголовок в большинстве верхних расположений или перед отправкой какого-либо вывода в браузер

function redirect($location) { header("location: $location"); exit(); }

0 голосов
/ 25 декабря 2010

Я лично использую функцию header (), но Meta просто обновляет страницу до того уровня, на котором этот URL-адрес перенаправления, поэтому у него есть шанс убить куки / сеансы, тогда как header() работает только в том случае, если перед вами ничего не размещеноиспользуй это.У них обоих есть взлеты и падения.

...