Вопрос в заголовке.
И что происходит, когда все 3 из $_GET[foo]
, $_POST[foo]
и $_COOKIE[foo] exist?
Какие из них попадают в $_REQUEST?
Вопрос в заголовке.
И что происходит, когда все 3 из $_GET[foo]
, $_POST[foo]
и $_COOKIE[foo] exist?
Какие из них попадают в $_REQUEST?
Я бы сказал, никогда.
Если бы я хотел, чтобы что-то было задано с помощью различных методов, я бы закодировал для каждого из них, чтобы напомнить себе, что я сделал это так, иначе вы могли бы переписать вещи, не понимая.
Не работает ли это так:
$_ GET = неразрушающие действия (сортировка, действия записи, запросы)
$_ POST = деструктивные действия (удаление, обновление)
$_ COOKIE = тривиальные настройки (настройки стилей и т.д.)
$_ SESSION = нетривиальные настройки (имя пользователя, вход в систему?, уровни доступа)
Иногда вам может потребоваться, чтобы один и тот же script вызывался несколькими различными способами. Подача формы и вызов AJAX приходит на ум. В большинстве случаев, однако, лучше быть явным.
Также см. http://docs.php.net/manual/en/ini.core.php#ini.request-order о том, как различные источники переменных переписывают друг друга, если есть столкновение имен.
$_REQUEST
- это всего лишь ярлык, который не позволяет вам тестировать пост, получать и готовить, если данные могут поступать из любого из них.
Есть некоторые подводные камни:
$_REQUEST
.Тем не менее, если вы знаете, что делаете, то это просто еще один удобный PHP трюк.
Я бы использовал его, если бы захотел быстро обновить var, который может поступать из нескольких источников. E.G:
Чтобы проверить, активен ли сеанс независимо от того, как передается идентификатор сеанса связи.
Чтобы ответить на вопрос "что происходит, когда все 3 существуют", ответ "это зависит".
PHP автоматически заполняет $_REQUEST на основе директивы request_order (или variables_order, если request_order отсутствует) в PHP.INI. По умолчанию обычно используется "GPC", что означает, что сначала загружается GET, затем загружается POST (переписывание GET, если есть столкновение), затем загружаются файлы cookie (переписывание get/post, если есть столкновение). Однако вы можете изменить эту директиву в файле PHP.INI. Например, сменив его на "CPG", сначала загружает файлы cookie, а затем публикует сообщения, а затем получает.
Насколько использовать его? Я повторю настроение "Никогда". Вы уже не доверяете пользователю, так зачем же давать пользователю больше инструментов? Как разработчик, вы должны знать, откуда вы ожидаете получить данные. Все это касается уменьшения площади поверхности атаки.
Если вы не уверены в том, где значения заполняются или когда вы их используете, и хотите, чтобы все циклы выполнялись с помощью методов POST и GET.
Я использую POST, когда я не хочу, чтобы люди имели легкий доступ к тому, что передается, и я использую GET, когда я не возражаю против того, чтобы они видели значение в URL-адресе. Обычно я не использую файлы cookie, так как я считаю, что SESSION подходит для сохраняющихся значений (хотя наличие правильного реестра - лучший способ его использования).