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

Вопрос в названии.

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

 Alix Axel13 авг. 2009 г., 14:13
Переменные перезаписываются в соответствии с gpc_order в php.ini, также вы должны обращаться к своим переменным через кавычки, например: $ _GET [& apos; foo & apos;]

Ответы на вопрос(6)

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

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

Решение Вопроса

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

Не должно ли это работать так:

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

$ _POST = разрушительные действия (удаление, обновление)

$ _COOKIE = тривиальные настройки (настройки таблицы стилей и т. Д.)

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

 20 сент. 2008 г., 11:47
Мы просто боремся с этим на моей работе. Наш продукт представляет собой систему CMS, которая делаетnot придерживаться правила выше. Мы хотели бы предоставить нашим клиентам устройства Google Mini www.google.com/enterprise/mini/, но невозможно позволить ему сканировать экстрасеть CMS, потому что весь ад может разорваться: /
 23 апр. 2013 г., 17:17
@RichBradshaw Это помогло мне в 2013 году. О да!
 20 сент. 2008 г., 11:40
Я всегда думал, что идея заключается в том, что если вы используете get для удаления чего-либо, то боты могут сканировать эти ссылки и, следовательно, удалять все в базе данных ... Звучит как ужасная история, поэтому я всегда придерживался схемы выше.
 20 сент. 2008 г., 11:38
Отличное замечание о методах GET и POST, они предназначены для разных целей. Однако в наши дни так мало веб-приложений работают ...
 20 сент. 2008 г., 12:51
Это расстраивает ... Хорошо подумать об этом, прежде чем начать действительно! Вы можете попробовать rel = & quot; nofollow & quot; на всех ссылках get, а затем постепенно удаляйте те, которые, как вы знаете, безопасны - конечно, это все еще немного пугает, если вы не уверены, насколько Google строг с nofollow.

когда все 3 существуют"? вопрос, ответ "это зависит."

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

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

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

Есть несколько подводных камней:

data are taken from GET, POST and finally COOKIE . The last override the first, so be careful with that. REST architectures require to separate the POST and GET semantics, you can't rely on $_REQUEST in that case.

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

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

In your controller, to decide what page to serve without checking if the request come from a form action or a hypertext link.

To check if a session is still active regardless of the way session id are transmitted.

чтобы один и тот же скрипт вызывался несколькими разными способами. На ум приходит форма и звонок AJAX. Однако в большинстве случаев лучше быть явным.

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

Ваш ответ на вопрос