Что вызывает петлю перенаправления? - PullRequest
3 голосов
/ 23 ноября 2010

Вот мои страницы:

Страница перенаправления: если у пользователя открыт сеанс, перенаправить на соответствующий ресурс, иначе перенаправить на страницу входа

Страница входа: если информация для входа пользователя действительна,перенаправить на $ _SERVER ['HTTP_REFERER'], иначе отобразить страницу входа

Когда вы посещаете страницу перенаправления, она видит, что у вас нет действительного сеанса, и перенаправляет на страницу входа.После этого вы можете войти без проблем, но после аутентификации я получаю «Эта веб-страница имеет цикл перенаправления».страница в Chrome.

Это не настоящий цикл, поскольку есть несколько выходов (IE предоставляет действительные данные для входа в систему и переходит к целевому ресурсу, предоставляет неверный пароль для входа и получает сообщение об ошибке и т. д.).Но я вижу замешательство браузера (переходя от a к b снова).

Есть идеи, как мне решить эту проблему?

Приветствия

Ответы [ 5 ]

5 голосов
/ 23 ноября 2010

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

Вместо того, чтобы полагаться на $ _SERVER ['HTTP_REFERER'], вам, вероятно, следует сохранить страницу, на которую они пытаются попасть, в переменной $ _SESSION или $ _COOKIE. Скорее всего, сессия будет лучше, в зависимости от ваших настроек.

2 голосов
/ 23 ноября 2010

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

Подумайте о сохранении URL 'redirect to' в сеансе PHP, прежде чем перенаправлять на страницу входа. Вы также можете передать его в качестве параметра при перенаправлении на страницу входа, но я вижу, что у этого подхода есть потенциальные недостатки безопасности (например, перенаправление пользователей на другой сайт, добавление поддельных заголовков HTTP и т. Д.)

1 голос
/ 23 ноября 2010

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

The address of the page (if any) which referred the user agent to the current page. This is set by the user agent. Not all user agents will set this, and some provide the ability to modify HTTP_REFERER as a feature. In short, it cannot really be trusted. 
1 голос
/ 23 ноября 2010

Я предполагаю, что:

Если у пользователя есть сеанс, но не действительный (например, хэш сеанса не совпадает), он перенаправляется на страницу входа (так как у него есть сеанс),Но когда он туда попадает, вы проверяете, есть ли у него сеанс, и он это делает (но он недействителен), поэтому вы перенаправляете его на ресурс индекса.Там вы проверяете, является ли сеанс действительным, но это не так.Таким образом, вы перенаправите его на страницу входа.И так далее ...

Как это исправить?Проверьте правильность сеанса (не только существования) как на странице входа, так и на других ресурсах.

И, конечно, если HTTP_REFERER - это вход в систему, проигнорируйте его и перешлите на ресурс индекса.

0 голосов
/ 23 ноября 2010

Вы можете позволить своей странице входа выполнить перенаправление за один проход (без перенаправления обратно на «страницу перенаправления»).

...