PHP-программисты часто делают пару ошибок присущие авторизации, которые впрочем легко исправляются. Все ошибки описанные ниже были исправлены на рабочем сайте в течение получаса, написание статьи заняло у меня в 5 раз больше времени.
1) После авторизации показывать пользователю окно с перенаправлением
Стремитесь проектировать взаимодействие с пользователем в
Многие известные системы страдают этим. Насколько я помню у всех форумов phpBB до сих пор после авторизации идёт страница «Подождите, вы будете перенаправлены, если ваш браузер не поддерживает редиректы нажмите… блаблабла». Не стоит даже обсуждать случай, когда браузер пользователя действительно не поддерживает
Обычно ошибка заключается в том что программист реализует функцию проверки авторизации используя переменные $_COOKIE, а проводит авторизацию используя функцию setcookie()
, которая устанавливает куксу, но не устанавливает переменную. Или же проверка авторизации запускается после авторизации на странице.
Решение: принудительно устанавливать переменную $_COOKIE, а вызов функции авторизации подвинуть выше проверки на авторизацию.
2) После авторизации показывать главную страницу, или страницу профиля пользователя
В 99% случаев это не та страница ради которой пользователь авторизовался на сайте. Как правило пользователь захотел прокомментировать статью, или скачать торрент, или совершить
Пользователю придётся возвращаться назад в истории браузера, или, что сложнее, искать нужную страницу, для которой требовалась авторизация на сайте, заново, что потребует катастрофически много усилий и времени.
Причина, почему так происходит, в том, что в качестве функции авторизации используется статичный адрес типа /login/, и функция авторизации не получает данных о странице на которой был пользователь.
Решение — использовать в этой функции http-переадресацию на страницу $_SERVER['HTTP_REFERER'], если она задана. Либо производить авторизацию на той же странице (
Замечу, что авторизация на отдельной странице /login/ и переадресация на нужную пользователю страницу, методом
3) При отсутствии авторизации перенаправлять на главную страницу
Это больше всего характерно для /admin/items/edit_4999.html
— он обнаруживает, что не авторизован на сайте. Адрес страницы часто бывает сложно запомнить, и система управления контентом должна приложить определённые усилия, чтобы менеджер никак не потерял этот адрес. Перенаправлять в данном случае не авторизовавшихся пользователей — не вежливо. Сайт который мы с коллегами улучшали сегодня — просто говорил о том что доступ запрещён, на нужной странице, и содержал ссылку на страницу с формой авторизации, что не многим лучше.
Исключениями могут быть только системы где адрес страницы не является критичным, например браузерные онлайн игры.
Решением для
4) Вызывать проверку авторизации в каждой функции
Ошибкой незаметной для пользователя, но иногда захламляющей и замедляющей код — является проверка авторизации в каждой функции
В модуле документооборота который я смотрела сегодня, это было не так. В результате, проверка авторизации, не относящаяся к
Решение — в одном месте будет гораздо проще отследить, какой функционал требует авторизации, а какой нет.
Заключение
Надеюсь статья поможет начинающим программистам сделать несколько улучшений их кода.
Комментарии:
Чабаев РЎСѓСЂС…Рѕ (Чабаев Сурхо)
12.07.2011 21:52:34
Елена Лунная
13.07.2011 14:28:16
Bars (Денис Борзенко)
26.08.2011 08:09:10