Как определить, откуда произошло перенаправление заголовка


Мне нужно найти способ, чтобы цель перенаправления заголовка() могла определить, какая страница инициировала перенаправление. Мы используем взлом mod_auth_cas для проверки логинов. Поскольку у нас не может быть всего сайта за mod_auth_cas, у нас есть подкаталог с Cas типа AuthType в.htaccess. для входа в систему мы даем ссылку на каталог /cas, cas обрабатывается, возвращенный идентификатор пользователя добавляется в $_SESSION и сравнивается с нашей базой данных разрешений, затем страница перенаправляется в домашняя страница.

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

Как может/cas/index.php определите, какая страница была создана перенаправление? Как мне избежать столкновения, когда у пользователя открыто несколько страниц, он одновременно перенаправляется на ЦС на одной, переходит на вторую страницу, где они также перенаправляются на ЦС, заставляет цс вернуться к первой, завершает ее снова и перенаправляется на вторую страницу, а не на первую? И это решение должно быть чистым PHP, без отслеживания javascript.

Author: Tyson of the Northwest, 2011-03-23

2 answers

Есть несколько способов сделать это.

- Либо сохраните исходный URL-адрес в сеансе перед перенаправлением

- На странице входа в систему возьмите URL-адрес ссылки из переменной $_SERVER и перенаправьте на него после входа в систему

- Настройте перенаправление таким образом, чтобы оно добавляло текущий URL-адрес в переменные get/post на странице входа в систему -- noaccess.php получает перенаправление на login.php?ret_url=noaccess.php (вы, вероятно, захотите использовать полный URL-адрес и кодировать его по URL-адресу)

 2
Author: dbers, 2011-03-23 18:24:34

Без изменения или добавления какого-либо кода вы можете установить расширение php XDebug и включить профилирование. Он выдаст файл cachegrind, содержащий информацию о стеке вызовов. Вы можете открыть его в чем-то вроде kcachegrind, чтобы получить визуальное представление о том, когда произошел вызов функции header().

 0
Author: vicTROLLA, 2011-03-23 18:37:02