2012-02-18 2 views
0

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

Например: У меня есть форма с кнопкой отправки. Когда пользователь нажимает кнопку отправки, он переходит на страницу. Но я хочу знать источник, откуда пришел запрос на отправку.

Это код до сих пор:

<form action="profile.php?id=<?php echo $user->id; ?>" method="post" name="formAdd"><input name="btnAddUser" type="submit" value="Add User"></form> 

Должен ли я использовать скрытый элемент ввода? Это будет хороший способ или, может быть, что-то еще?

+0

IMO, скрытый элемент, содержащий переменную '$ _SERVER [" REQUEST_URI "]' является хорошим решением. – satoshi

+0

вы используете: method = "post", но profile.php? Id = ... является формой запроса GET. Я не уверен, что это работает или нет - интересно проверить! – alfasin

+0

@alfasin - На самом деле я хочу, чтобы он перенаправлялся на ту же страницу пользователя после ее отправки. Можете ли вы предложить любой другой способ? – maxxon15

ответ

3

Прежде всего, не существует надежный способ - пользователи могут подделывать запросы, если они хотят.

Кроме того, есть два способа, чтобы получить такую ​​информацию, которую вы хотите:

  1. The реферер, доступный через $_SERVER['HTTP_REFERER']: Он содержит полный URL-адрес, с которого поступил запрос, но некоторые люди используют расширение/брандмауэры/и т.д.. которые блокируют или даже подделывают ссылки
  2. Как вы предположили, скрытый элемент формы. Это всегда срабатывает, если пользователь не хочет изменять данные. Так что это предпочтительный способ.
1

Это действительно зависит от того, насколько безопасным и надежным вам это нужно. Скрытое поле формы будет работать, хотя это означает, что вам нужно добавить его в каждую форму, которая указывает на ваш скрипт обработки. Это также легко подделать, если кто-то захочет. В качестве альтернативы вы можете использовать $ _SERVER ['HTTP_REFERER']. Это не всегда надежно - я считаю, что он зависит от того, какой браузер вы используете, но должен быть достаточно хорош в большинстве простых сценариев. Другой альтернативой было бы хранить что-то в сеансе и использовать его. Вероятно, это наиболее безопасно, так как все серверные и не могут быть подделаны, но, вероятно, это сложнее всего реализовать (не то, что это ракетостроение).

+0

Это хорошая идея. Как насчет того, что у меня есть переменная типа '$ this_page = profile.php', которая была бы на других страницах с изображением имени страницы. Я могу использовать это вместо ** profile.php ** в моем коде. Это будет хороший способ? – maxxon15

+0

@ maxxon15 Я не совсем уверен, как ваше предлагаемое решение будет работать. Возможно, обновите свой исходный вопрос с помощью некоторого примера кода? – liquorvicar

+0

Я пытаюсь сказать следующее: '

' – maxxon15

0

Вы можете сохранить страницу в переменной сеанса ($ _SESSION ["something"] = "page.php"), это самый безопасный способ, я думаю, потому что скрытый ввод в форме может быть изменен на пользователь и $ _SERVER ['HTTP_REFERER'] не всегда доступны.

+0

Как насчет метода, который я опубликовал в этом ответе? http://stackoverflow.com/a/9340839/432720 – maxxon15

+0

@ maxxon15, ваш метод работает, но я не думаю, что безопасно передавать идентификатор пользователя с помощью GET, потому что пользователь может легко изменить его на код другого пользователя. –

+0

Его запрос ** GET **? : O Но когда я проверил его через '$ _SERVER ['REQUEST_METHOD'], он сказал, что это был запрос POST! : | – maxxon15

0

Я бы использовал скрытое поле, где значение = "name_of_referring_page". Таким образом, независимо от того, какие настройки пользователя, брандмауэр, браузер и т. Д. Вы получаете информацию, которую хотите.

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