Я просматриваю систему (старую систему), в которой в некоторых случаях они отправляют данные в форме с методом 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, и особенно с тем же именем переменной в обоих?
спасибо.
Я знаю, что нужно использовать $ _POST или $ _GET, проблема в том, что они RELY на глобальные регистры, поэтому они не используют ни один, ни $ _REQUEST. На данный момент мы имеем контроль над серверами и можем всегда контролировать флаг (а также версию php, мы сохраняем его в 5.3, чтобы мы могли точно полагаться на это). Я просто удалю версию GET этого конкретного переменную и надежду не повлиять на что-то. – DiegoDD
Если это работает для вас, тогда это ОК (возможно, не очень безопасно, хотя). Вы также можете посмотреть на это: http://stackoverflow.com/questions/1417373/why-is-register-globals-so-bad – Maximus2012
относительно обновления ответа, это именно то, что они делают! они передают идентификатор sesion в качестве параметра в URL-адресе, но ПОЧЕМУ это сделать? почему бы просто не отправить его в запрос POST? Я имею в виду, почему это должно быть в GET вместо POST? Или зачем вообще его отправлять? Разве php «не распространяется» на сеанс? это точка $ _SESSION и session_ID(), правильно? если он хранится, зачем вам его распространять по URL? – DiegoDD