Аутентификация пользователей
Реализация структуры, позволяющей пользователям регистрироваться на сайте и входить в систему, является одной из наиболее типичных задач, решаемых веб-разработчиками. Страницы на сайте делятся на открытые, предназначенные для общего доступа, и те, для загрузки которых следует ввести личные данные. Набор страниц для регистрации и входа создается для того, чтобы определенные пользователи имели возможность получать доступ на страницы, требующие аутентификации. Этот урок посвящен созданию структуры, позволяющей производить аутентификацию пользователей. Благодаря набору моделей поведения в Dreamweaver реализация механизма аутентификации оказывается гораздо проще, чем кажется.
Может возникнуть вопрос о том, для чего компании Newland Tours требуется аутентификация. Посетителей сайта Newland Tours можно разделить на три группы:
- посетители, которые впервые попали на сайт и пытаются понять, есть ли на нем что-то интересное;
- серьезно настроенные посетители, которые хотят получить исчерпывающую информацию о конкретных путешествиях;
- сотрудники компании Newland Tours, которые уполномочены заниматься поддержкой контента сайта.
Посетители, относящиеся к первой группе, могут заходить на страницы home, about и contact. Для получения доступа к описаниям путешествий, информации о странах и приложению для расчета стоимости туров посетителям требуется зарегистрироваться на сайте. Регистрация является бесплатной. Полученную информацию компания Newland Tours использует в маркетинговых и рекламных целях, чтобы лучше знать своих посетителей и т.д. И, наконец, привилегированные пользователи из третьей группы имеют доступ к системе управления контентом сайта. Эта система, которая будет создана в одном из следующих уроков, позволяет сотрудникам Newland Tours вводить в веб-формы новую информацию для размещения на сайте, не пользуясь при этом FTP-соединением и не создавая HTML-код.
увеличить изображение
Рис. 13.1. В этом уроке будет создан окончательный вариант системы для регистрации и доступа, который должным образом реагирует как на правильно введенные данные, так и на ошибки заполнения форм
Что будет изучаться:
- функциональные возможности веб-приложения как объекта, состоящего из набора страниц;
- создание страницы для регистрации;
- создание страницы для входа в систему;
- запрет доступа к страницам, если посетители не ввели имя и пароль;
- перенаправление посетителей на защищенную (от анонимных и нежелательных пользователей) страницу после того, как они введут имя и пароль.
Время выполнения
На выполнение этого урока потребуется примерно 90 мин.
Файлы урока
Исходные файлы:
Lesson13/Start/newland/generic_template.asp
Lesson13/Start/newland/index.asp
Lesson13/Start/newland/profiles.asp
Lesson13/Start/newland/profiles_detail.asp
Lesson13/Start/newland/tour_detail.asp
Lesson13/Start/newland/tourprice.asp
Lesson13/Start/newland/tourprice_processor.asp
Lesson13/Start/newland/tours.asp
Итоговые файлы:
Lesson13/Complete/newland/generic_template.asp
Lesson13/Complete/newland/index.asp
Lesson13/Complete/newland/login.asp
Lesson13/Complete/newland/login_failed.asp
Lesson13/Complete/newland/profiles.asp
Lesson13/Complete/newland/profiles_detail.asp
Lesson13/Complete/newland/register.asp
Lesson13/Complete/newland/registration_failed.asp
Lesson13/Complete/newland/tour_detail.asp
Lesson13/Complete/newland/tourprice.asp
Lesson13/Complete/newland/tourprice_processor.asp
Lesson13/Complete/newland/tours.asp
Lesson13/Complete/newland/application.cfm (только ColdFusion)
Аутентификация пользователя в веб-приложении
Как обычно, прежде чем начинать работу с серверными моделями поведения, на основе которых можно разработать программные средства для аутентификации, важно понять принципы их работы. Пользователь может зайти на страницу с ограниченным доступом только в том случае, если он ввел правильные данные доступа. Обычно подобные данные состоят из имени пользователя и пароля. После их ввода в базу отправляется запрос ASP, ColdFusion или PHP, проверяющий, содержатся ли в какой-нибудь записи введенные имя пользователя и пароль. Если ответ положительный, проверка завершается успешно, и пользователь регистрируется как вошедший в систему (как правило, незамедлительно). Если в базе данных нет записей, в которых бы одновременно присутствовали введенные имя пользователя и пароль, вход в систему завершается, и посетитель переводится на страницу, содержащую сообщение о том, что вход в систему завершен неудачно.
В начале кода любой страницы с ограниченным доступом содержится сценарий, проверяющий, вошел ли пользователь в систему. Если результат проверки оказывается положительным, страница обрабатывается дальше и отображается в браузере. Если же пользователь не вошел в систему, он, как правило, переводится на страницу, позволяющую ввести данные пользователя, но страница с ограниченным доступом не загружается.
За одним исключением, полученных в книге знаний достаточно, чтобы понять, как процедура регистрации реализуется в ASP, ColdFusion или PHP. Этим исключением является понятие о маркировке пользователя как вошедшего в систему и проверка при переходе с одной страницы на другую. Поскольку сервер забывает посетителя при загрузке каждой новой страницы, установка отметки в виде флажкового индикатора (флага) и проверка ее существования являются проблематичными. "Забывчивость" сервера преодолевалась в предыдущих уроках путем пересылки переменных URL-адреса (или запроса) и переменных формы между страницами. Но эти решения являются временными, и для их реализации необходимо вручную пересылать данные на каждую страницу, которой они требуются. Поэтому целесообразно отыскать более предпочтительное и эффективное средство, которое бы устраняло указанный недостаток.
В книге уже появлялся один вид продолжительно существующих переменных – переменные файла cookie. Как известно, переменная файла cookie – это имя и соответствующее ему значение, которые хранятся в файле на жестком диске компьютера у посетителя и пересылаются на сервер вместе с HTTP-запросом. Употребление этого приема позволяет серверу "помнить" пользователя при переходе между страницами. Это выражается в том, что страницы используют данные, хранящиеся в файле cookie, и реагируют на них.
Чтобы облегчить создание приложений, в которых требуется постоянно отслеживать перемещение посетителей и данных, ASP, ColdFusion и PHP содержат встроенные возможности, которые выполняют значительную часть рутинной работы за разработчика. Среди этих возможностей существуют два типа переменных, каждый со своей областью видимости: переменные приложения (application variables) и переменные сессии (session variables).
- Переменные, существующие в рамках приложения, содержат любую изменчивую информацию, которая должна использоваться всеми страницами приложения, вне зависимости от пользователя. К примеру, чтобы добавить на каждую страницу сайта информацию о респонденте, с которым следует связаться по тем или иным вопросам, достаточно присвоить значения имени и контактных данных переменной приложения и прикрепить эту переменную на каждую страницу. Это значительно проще, чем указывать одну и ту же информацию на всех страницах самостоятельно. Если впоследствии сведения о респонденте изменятся, достаточно внести коррективы в значения переменной приложения, после чего информация будет обновлена по всему сайту. Область видимости приложения реализована только в ASP и ColdFusion, однако ее легко сымитировать и в PHP.
- Переменные, существующие в рамках сессии, включают информацию для отдельного пользователя в специально создаваемой сессии. Если посетитель покидает сайт или закрывает браузер, то через определенное время (обычно 20 мин) сессия завершается и информация удаляется из памяти.
Конечно, для хранения отметки с флагом о входе в систему переменная сессии является идеальным вариантом. То есть, после того, как пользователь успешно входит в систему, задается переменная сессии, означающая успешный вход. Каждая страница с ограниченным доступом при загрузке должна проверить наличие этой переменной и соответственно определить, открыть ли доступ к странице или перенаправить пользователя на другую страницу.
Ключевым понятием здесь является продолжительность существования переменной. При помощи более эффективных средств для создания приложений ASP, ColdFusion и PHP позволяют разработчикам создавать сайты, на которых данные сохраняются в течение определенного времени, что позволяет преодолеть ограничения, характерные для протокола HTTP, не использующего информацию о состоянии. Эта возможность долговременного хранения является решающим фактором не только в приложении для аутентификации пользователей, но и в работе многих других программ. Сложно представить Интернет-магазин, который забыл о своем покупателе при переключении со страницы, в которую был введен адрес доставки, на страницу для ввода данных кредитной карты. Если в такой ситуации оплатить покупку, ее могут доставить кому-нибудь другому.
Чтобы данные продолжали существовать в течение определенного времени, они должны где-то храниться. Место хранения зависит от области видимости переменной. Переменные приложения, как правило, хранятся в памяти сервера. По этой причине переменные приложений должны занимать как можно меньше места.
Переменные сессии, в свою очередь, хранятся в файлах cookie на компьютере пользователя и согласовываются с переменными сессии, хранящимися на сервере. Хранение данных в двух местах и их последующее сравнение обычно незаметно разработчику, то есть при установке и извлечении переменных сессии не придется устанавливать и извлекать также переменные сервера и файлов cookie, поскольку все это произойдет автоматически.
Для реализации этого механизма ASP, ColdFusion и (в определенной степени) PHP распознают набор страниц, из которых состоит сайт в качестве единого объекта – приложения. Разные страницы являются частью приложения, когда у них есть доступ к одним и тем же данным сессии и приложения. Несмотря на то, что увидеть приложение целиком невозможно – это не физический объект, – оно все же существует. Веб-приложения состоят из наборов файлов, которыми ASP, ColdFusion или PHP управляет как одной группой.
В ASP и ColdFusion есть специальные страницы, на которых задаются связанные с приложением данные и сценарии. В ASP – это global.asa, а в ColdFusion – application.cfm. Несмотря на то, что в деталях эти файлы сильно различаются, роли их сходны. Оба позволяют задавать переменные и события, видимые с любой страницы приложения, а также управлять сессиями. Любая переменная, сценарий или механизм, добавленный на страницу global.asa или application.cfm, становится доступным каждому сайту ASP и ColdFusion в рамках этого приложения. В большинстве случаев страницы global.asa и application.cfm хранятся в корневом каталоге сайта, поэтому областью видимости приложения становится весь сайт.
В PHP отсутствует прямой аналог страниц global.asa и application.cfm. Однако реализовать в PHP их действие довольно просто. Например, одной из самых важных особенностей страницы application.cfm является то, что она позволяет создавать сессии, переменные сессии, а так же управлять сессиями. Разработчик активирует управление сессиями в файл application.cfm, после чего ColdFusion автоматически приставляет этот файл к каждой странице, запрошенной в рамках приложения. Другими словами, управление сессиями в ColdFusion работает таким образом, что на завершающем этапе анализа, после того, как ColdFusion добавит к каждому файлу содержимое application.cfm, вверху каждой страницы будет вставлен код, разрешающий проведение сессии. В PHP (версии 4.1 и выше), чтобы разрешить использование сессий вверху страницы, вставляется метод session_start(). Другой способ – создать файл, содержащий только вызов этого метода, после чего включить файл в верхнюю часть каждой страницы. Таким образом, несмотря на то, что PHP значительно отличается от ASP и ColdFusion, сходные черты являются более весомыми, чем различия.
Даже столь краткий обзор позволяет понять, почему структура для управления сессиями так важна для аутентификации. Она позволяет предоставить посетителю доступ на множество страниц, не требуя от разработчика вручную создавать сценарии, отправляющие данные при каждом переходе между страницами.