HTTP_REFERER пусто при перенаправлении компонентом Auth - PullRequest
2 голосов
/ 30 августа 2011

В CakePHP, когда вы пытаетесь получить доступ к защитному действию, вы автоматически переходите к форме входа в приложение. Однако HTTP_REFERER пусто ????

$referer = env('HTTP_REFERER');

echo $referer;

Обычно, когда я захожу на страницу входа в систему, я вижу URL предыдущей страницы с этим кодом, но если я захожу на страницу входа после того, как компонент Auth переместил ее туда, она будет пустой ...

почему он пуст? как меня только что направили ???

и как мне получить подтверждение перенаправления как реферала? ПРИМЕЧАНИЕ. Использование значения сеанса Auth.Redirect в этом случае недоступно, поскольку оно останется после того, как человек покинул сайт, поэтому, например, если он вернется на страницу входа, он покажет запрошенное действие ORIGINAL и НЕ указанная страница! Таким образом, он будет действовать как реферал, даже если его нет, потому что он использует существующий сеанс

EDIT:

В качестве альтернативного примера:

    if(isset($_SERVER['HTTP_REFERER'])) {
        echo $_SERVER['HTTP_REFERER'];
    }
    else
    {
        echo 'their was no referer';
    }

Когда пользователь попадает в форму входа, он скажет, что он не был реферером, но это, очевидно, не ИСТИНА! ????

Ответы [ 3 ]

2 голосов
/ 30 августа 2011

HTTP_REFERER - это способ браузера сказать серверу, какую страницу посетил пользователь раньше. Он не указывает, с какой страницы был перенаправлен пользователь.

Взять, к примеру, рекламу на Stackoverflow здесь. Нажав на один из них, вы перейдете к длинному URL-адресу adzerk.net, который записывает ваш клик, а затем перенаправляет вас на целевой URL-адрес. Промежуточная страница Adzerk сама по себе не является интересной страницей, и пользователь фактически никогда не видит ее, если не обращает пристального внимания на адресную строку. На самом деле там даже нет «страницы». Так что это не считается «посещением страницы». Следующая страница получит stackoverflow.com в качестве реферера, промежуточная страница перенаправления не имеет значения.

Stackoverflow -> Adzerk redirect -> Some advertiser
                                    HTTP_REFERER: stackoverflow.com

Также нет никакого реферера, если вы вводите адрес в адресную строку. Если вы используете Stackoverflow и вводите yahoo.com в адресную строку, Yahoo не увидит ни одного рефери от вас. Если вы нажмете по ссылке, ведущей из Stackoverflow в Yahoo, браузер отправит реферера.

В вашем случае, если вы напрямую получаете доступ к защищенному действию, набирая его в адресной строке и перенаправляясь, просто не будет предыдущей страницы, с которой вы пришли.


Согласно комментариям, здесь, как вставить данные в URL при перенаправлении:

AppController extends Controller {

    function redirect($url, $status = null, $exit = true) {
        if (is_array($url)) {
            $url['?'] = 'redirect=true';
        } else {
            $url.= '?redirect=true';
        }
        return parent::redirect($url, $status, $exit);
    }

}
0 голосов
/ 30 августа 2011

Вы пробовали использовать контрольный контроллер?

$refer = Controller::referer(); // referral url

0 голосов
/ 30 августа 2011

Является ли $_SERVER['HTTP_REFERER'] также пустым?

Если оно пустое, оно не устанавливается сервером, это означает, что обычно не было никакого реферера, вы сделали простое обновление или вызвали эту страницу с помощью закладки. Смотрите некоторые варианты использования для referer здесь: http://www.electrictoolbox.com/php-http-referer-variable/

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