В CakePHP, когда вы пытаетесь получить доступ к действию защиты, вы автоматически переходите к форме входа в свое приложение. Однако HTTP_REFERER пуст ????
$referer = env('HTTP_REFERER'); echo $referer;
Поэтому, когда я посещаю страницу входа в систему, я вижу URL-адрес предыдущей страницы с указанным кодом, но если я заберу страницу входа в систему после того, как ее заберут с помощью компонента Auth, он будет пустым …
почему он пуст? как я только что сказал ???
и как мне заставить его признать перенаправление в качестве реферала? ПРИМЕЧАНИЕ. Использование значения сеанса Auth.Redirect в этом случае не является вариантом, так как оно останется вокруг после того, как человек покинул сайт, поэтому, например, если они вернутся на страницу входа в систему, он покажет запрос ORIGINAL, а НЕ страница! Таким образом, он будет действовать как реферал, даже если его не потому, что он использует существующую сессию
РЕДАКТИРОВАТЬ:
В качестве альтернативного примера:
if(isset($_SERVER['HTTP_REFERER'])) { echo $_SERVER['HTTP_REFERER']; } else { echo 'their was no referer'; }
Когда пользователь будет отправлен в форму для входа, он скажет, что у них не было рефери, но это, очевидно, не ИСТИНА! ????
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); } }
Является ли $_SERVER['HTTP_REFERER']
пустым?
Если он пуст, он не задается сервером, это означает, что обычно не было реферирования, вы сделали простое обновление или вызвали эту страницу через закладку. См. Некоторые варианты использования для рефератора здесь: http://www.electrictoolbox.com/php-http-referer-variable/
Вы пробовали контроллер доступа?
$refer = Controller::referer(); // referral url