2013-08-09 1 views
0

Я просматриваю систему (старую систему), в которой в некоторых случаях они отправляют данные в форме с методом POST, но они также отправляют параметры на url, как если бы они использовали get.PHP: причины использовать GET и POST-запрос одновременно?

что-то вроде этого:

echo "\n<FORM METHOD='POST' NAME='onegroup' ACTION='menu.php?sesion=".$sesion."' > 
    <INPUT TYPE='HIDDEN' NAME='sesion' VALUE='".$sesion."'> 
    <INPUT TYPE='HIDDEN' NAME='index_login' VALUE='1'> 
[...] 
</FORM>\n"; 

(примечание, sesion не опечатка, это просто слово «сессия» на испанском языке)

Что происходит, что параметр «sesion» отправляется как по URL и по полю ввода, таким образом, переменная 'sesion' затем принимается как в массиве $_POST, так и в массиве $_GET.

Зачем это необходимо, и должен ли я оставить его таким? или я могу просто снять его с URL-адреса и просто положиться на данные $_POST?

Я прочитал в комментариях для this ответ, что вполне возможно и полезно отправлять данные как из GET, так и из POST (хотя сам метод является только GET или POST (или другими), в этом случае POST, потому что таким образом определяет форма). Теперь в этом конкретном случае, почему кто-то хочет отправить SAME sesion переменную (то есть с тем же значением) как с помощью get (по url), так и после запросов?

В моем скрипте menu.php можно читать как $_POST, так и $_GET, и каждый из них будет иметь свою «версию» этой переменной, но, похоже, это одно и то же. Я также играл и видел, что если вместо $ _POST или $_GET я читаю массив $_REQUEST, я получаю все переменные вместе, но в случае дублированного (sesion) пост-версия имеет приоритет.

Другое дело в том, что они полагаются на опцию «Register Globals», и, таким образом, вместо того, чтобы явно с помощью $_GET["sesion"] или $_POST["sesion"] (или даже $_REQUEST[]) они просто использовать «$ Sesion» везде использовать эту информацию (и точно так же, для любой другой переменной в запросе). Опять же, играя, я вижу, что в этом случае также имеет приоритет версия POST переменной. Но могу ли я всегда полагаться на это?

Должен ли я использовать метод post и удалять параметр из URL-адреса?

Зачем им это делать, а не просто отправлять все по почте? Как я вижу, нет причин использовать оба варианта, особенно, поскольку оба имеют значение SAME. Если бы они этого не сделали, они могли бы просто выбрать, какую версию использовать, но это не так, и я не могу думать ни о чем другом, что это просто то, что они оставили там и никогда не «фиксировано»

Что такое «реальные» примеры, в которых кто-то должен будет использовать такой сценарий с запросами POST и GET, и особенно с тем же именем переменной в обоих?

спасибо.

ответ

2

Вы должны удалить один из них (желательно GET), если значения одинаковы. Однако вам также необходимо убедиться, что вы внесете соответствующие изменения в логику обработки форм, чтобы код получил ожидаемые значения. Лучше использовать $ _POST или $ _GET вместо $ _REQUEST, так как вы четко указываете, какие значения вы передаете и какие значения ожидает ваш код. Например, если вы используете $ _REQUEST, то ваши значения POST могут быть перезаписаны GET, что может быть проблемой безопасности.Кроме того, не стоит полагаться на регистровые глобальные переменные, так как это может вызвать проблему безопасности, а также возможность включения/выключения глобального реестра может отличаться от сервера к серверу. Что касается того, зачем кому-то это делать, это может быть ошибка или нехватка знаний о том, как работает PHP GET/POST.

For a real life scenario: 

Для многих из моих приложений я использую сессии и передать PHP session_id в качестве параметра GET в URL от страницы к странице. Каждая страница также имеет «verify.php» требуется, которая проверяет сессию и проверяет, если пользователь вошел в системе Если я имею дело с формами, то я просто создаю форму и указать часть действия, как:.

action="form_submit_page.php?SID=<?php echo Session_ID(); ?>" 

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

+0

Я знаю, что нужно использовать $ _POST или $ _GET, проблема в том, что они RELY на глобальные регистры, поэтому они не используют ни один, ни $ _REQUEST. На данный момент мы имеем контроль над серверами и можем всегда контролировать флаг (а также версию php, мы сохраняем его в 5.3, чтобы мы могли точно полагаться на это). Я просто удалю версию GET этого конкретного переменную и надежду не повлиять на что-то. – DiegoDD

+0

Если это работает для вас, тогда это ОК (возможно, не очень безопасно, хотя). Вы также можете посмотреть на это: http://stackoverflow.com/questions/1417373/why-is-register-globals-so-bad – Maximus2012

+0

относительно обновления ответа, это именно то, что они делают! они передают идентификатор sesion в качестве параметра в URL-адресе, но ПОЧЕМУ это сделать? почему бы просто не отправить его в запрос POST? Я имею в виду, почему это должно быть в GET вместо POST? Или зачем вообще его отправлять? Разве php «не распространяется» на сеанс? это точка $ _SESSION и session_ID(), правильно? если он хранится, зачем вам его распространять по URL? – DiegoDD

1

Я использую параметры запроса запроса (GET) для выбора активной страницы и значений POST для переноса данных формы. Для этого есть законный прецедент.

Если данные являются повторением, а затем убить GET.

+0

Я также использую querystring, а не viewstate, чтобы сохранить некоторые переменные параметров и позволить мне манипулировать настройками страниц, которые я открываю или обновляю программно. Этот тип процедуры часто отделен от подачи формы, и поэтому одновременное использование и публикация могут быть использованы. – user314321

 Смежные вопросы

  • Нет связанных вопросов^_^