2010-10-23 3 views
0

Может кто-нибудь объяснить, как я могу использовать

$_SERVER['REQUEST_URI'] 

Как я могу сделать это требуется, как: Для того, чтобы получить доступ к этой странице, вы должны прийти с этой страницы (оба внутренние)?

Я думал, что $ _SERVER может это сделать для меня, и нашел пример выше в php.net. Как я могу использовать его?

Благодаря

ответ

2

REQUEST_URI - путь и запрос URI по мере его запроса. Кроме того, $_SERVER['HTTP_REFERER'] содержит значение HTTP request header field Referer, если оно доступно. Таким образом, чтобы проверить оба содержат ли один и тот же путь URI, вы можете сделать это:

if (isset($_SERVER['HTTP_REFERER'])) && parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH) === parse_url($_SERVER['HTTP_REFERER'], PHP_URL_PATH)) { 
    // Referer existing and its path is equal to the current requested URI path 
} 

Но причина, почему isset используется в этом случае, что Referer не всегда передается. В общем, только тогда, когда запрос вызван ссылкой на ссылку или отправкой формы, поле заголовка будет отправлено клиентом. Поэтому вполне вероятно, что это поле заголовка не установлено. Кроме того, его ценность также может быть подделана и, следовательно, не заслуживает доверия, как любая другая информация, поступающая от клиента.

Это также является причиной того, почему вы не должны использовать эту информацию для проверки подлинности запроса. Вместо этого используйте свой собственный authentication tokens.

0

Звук как то, что вы хотите $_SERVER['HTTP_REFERER'] - это будет содержать адрес страницы, на которую нажал пользователь, чтобы сгенерировать текущий запрос.

Обратите внимание, что это не особо надежный механизм, так как это easy to spoof. Однако, если он используется исключительно для внутреннего использования, он может быть вам подходит.

Смотрите также

0

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

Если вы действительно хотите использовать переменные $ _SERVER, как я сказал ранее, используйте $ _SERVER ['HTTP_REFERER'], который содержит последний URL-адрес пользователя, посетившего пользователя, прежде чем он отправился на ваш стр.

1

У вас неправильная переменная. Я думаю, вы хотите $_SERVER['HTTP_REFERER'], который дает вам страницу, с которой пришел пользователь.

Обратите внимание, что некоторые брандмауэры вычеркивают заголовок ссылки из всех HTTP-запросов, поэтому HTTP_REFERER иногда может быть пустым. Также обратите внимание, что HTTP_REFERER может быть установлен веб-браузером (на клиенте), поэтому вы не должны полагаться на него для обеспечения безопасности. Некоторые пользователи могут сами устанавливать заголовки рефереров.

+0

Это не для обеспечения безопасности. Можете ли вы привести мне пример того, как сделать это «обязательным», чтобы пользователь посетил x.php, прежде чем смог получить доступ к y.php. Даже если они могут обмануть его, это не имеет значения. – Aborted

0

$ _SERVER ['HTTP_REFERER'] - это хороший способ узнать о вызывающей странице.Но поскольку это создает проблемы в работе, вы можете вместо этого устанавливать флаги со страниц. Если $ _SERVER ['HTTP_REFERER'] работает нормально, тогда это лучший способ.

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