Подтвердить что ты не робот

Когда и почему следует использовать $_REQUEST вместо $_GET/$_POST/$_COOKIE?

Вопрос в заголовке.

И что происходит, когда все 3 из $_GET[foo], $_POST[foo] и $_COOKIE[foo] exist? Какие из них попадают в $_REQUEST?

4b9b3361

Ответ 1

Я бы сказал, никогда.

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

Не работает ли это так:

$_ GET = неразрушающие действия (сортировка, действия записи, запросы)

$_ POST = деструктивные действия (удаление, обновление)

$_ COOKIE = тривиальные настройки (настройки стилей и т.д.)

$_ SESSION = нетривиальные настройки (имя пользователя, вход в систему?, уровни доступа)

Ответ 2

Иногда вам может потребоваться, чтобы один и тот же script вызывался несколькими различными способами. Подача формы и вызов AJAX приходит на ум. В большинстве случаев, однако, лучше быть явным.

Также см. http://docs.php.net/manual/en/ini.core.php#ini.request-order о том, как различные источники переменных переписывают друг друга, если есть столкновение имен.

Ответ 3

$_REQUEST - это всего лишь ярлык, который не позволяет вам тестировать пост, получать и готовить, если данные могут поступать из любого из них.

Есть некоторые подводные камни:

  • данные берутся из GET, POST и, наконец, COOKIE. Последнее отменяет первое, поэтому будьте осторожны с этим.
  • Архитектура REST требует отделить семантику POST и GET, в этом случае вы не можете полагаться на $_REQUEST.

Тем не менее, если вы знаете, что делаете, то это просто еще один удобный PHP трюк.

Я бы использовал его, если бы захотел быстро обновить var, который может поступать из нескольких источников. E.G:

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

     

Ответ 4

Чтобы ответить на вопрос "что происходит, когда все 3 существуют", ответ "это зависит".

PHP автоматически заполняет $_REQUEST на основе директивы request_order (или variables_order, если request_order отсутствует) в PHP.INI. По умолчанию обычно используется "GPC", что означает, что сначала загружается GET, затем загружается POST (переписывание GET, если есть столкновение), затем загружаются файлы cookie (переписывание get/post, если есть столкновение). Однако вы можете изменить эту директиву в файле PHP.INI. Например, сменив его на "CPG", сначала загружает файлы cookie, а затем публикует сообщения, а затем получает.

Насколько использовать его? Я повторю настроение "Никогда". Вы уже не доверяете пользователю, так зачем же давать пользователю больше инструментов? Как разработчик, вы должны знать, откуда вы ожидаете получить данные. Все это касается уменьшения площади поверхности атаки.

Ответ 5

Если вы не уверены в том, где значения заполняются или когда вы их используете, и хотите, чтобы все циклы выполнялись с помощью методов POST и GET.

Ответ 6

Я использую POST, когда я не хочу, чтобы люди имели легкий доступ к тому, что передается, и я использую GET, когда я не возражаю против того, чтобы они видели значение в URL-адресе. Обычно я не использую файлы cookie, так как я считаю, что SESSION подходит для сохраняющихся значений (хотя наличие правильного реестра - лучший способ его использования).