Как передать URL перенаправления на страницу mod_rewritten? - PullRequest
0 голосов
/ 27 января 2009

Я модифицирую свои страницы так, как это делает SO. У меня есть www.example.com/users/login/, который будет внутренне использовать users.login.php, который действует как контроллер. Я хочу передать параметр как страницу для перенаправления после завершения входа в систему.

Если вы передадите относительный URL, вы получите очень странный URL, потому что вы передаете что-то вроде questions/, которое выглядит как users/login/questions/ вместо login.php?redir=questions.php

Есть ли у кого-нибудь какие-либо комментарии или решения относительно того, как это можно сделать красиво, без ужасного загрязнения URL? Я думаю, что способ, которым SO справлялся, заключался в том, чтобы поместить форму входа на странице «Задать вопрос». Я полагаю, что это решение, но я ищу другие возможности.

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

Ответы [ 3 ]

3 голосов
/ 27 января 2009

Я использую скрытое поле в форме входа, которое содержит URL, и это работает для меня. Вы можете попробовать это тоже.

  1. создать скрытое поле ввода.
  2. установить значение поля ввода на $referer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';
  3. получить опубликованный URL и перенаправить пользователя на этот URL.

Примечание: HTTP_REFERER не всегда установлен.

1 голос
/ 27 января 2009

Для сохранения предыдущей просмотренной страницы рекомендуется использовать $_SESSION global. Использование HTTP_REFERER для чего-либо кроме статистики требует от пользователей злоупотреблений, поскольку вы легко можете подделать реферера.

Проверьте эту ссылку для хранения нескольких идентификаторов сеансов в cookie. http://bytes.com/groups/php/7630-handling-multiple-sessions

0 голосов
/ 27 января 2009

Почему вы не используете URL типа /users/login/?r=/questions/? Или, если вы не хотите использовать URL-адрес для переноса обратного адреса, вы можете использовать реферер HTTP.

...