Использование файлов "cookie"
Файлы "cookie" являются небольшими, но мощными инструментами. Однако они приобрели плохую
репутацию в прессе из-за того, что некоторые люди используют их не по назначению. Файлы
"cookie" - это небольшие фрагменты текста, которые могут облегчить вашу жизнь, как разработчика,
если вы будете использовать их правильно. В этой главе вы узнаете, как сделать следующее:
записать файлы "cookie";
извлечь данные из файлов "cookie";
улучшить ваши программы аутентификации пользователя с помощью файлов "cookie";
Что тaкoe "cookie"?
Файлы "cookie" — это небольшие фрагменты текста, которые посылаются на Web-браузер пользователя.
Файлы "cookie" могут помочь вам создать покупательские корзины, сообщества пользователей и
персонализировать сайты. Не рекомендуется сохранять конфиденциальную информацию в файлах "cookie",
но вы можете сохранять в них yникальные идентификационные строки, которые будут соответствовать
данным о пользователе, хранящихся в зашифрованном виде в базе данных.
Рассмотрим пример с покупательскими корзинами. Предположим, что вы присваиваете пользователю
идентификационную переменную, чтобы иметь возможность проследить, что он делает, когда посещает
ваш сайт. Во-первых, пользователь регистрируется, и вы посылаете файл "cookie" с переменными,
которые говорят: "Это Иванов, и Иванову разрешено здесь бывать". Пока Иванов просматривает ваш
сайт, вы можете говорить ему на каждой странице: "Привет, Иванов!". Если Иванов на разных страницах
вашего сайта выберет 14 разных товаров для покупки, вы можете запомнить все эти вещи и показать их
все сразу в одной корзине, когда Иванов дойдет до кассы.
Запись файлов "cookie"
Перед началом записи файлов "cookie" определите, как вы будете их использовать, и в какое
место вы будете их записывать. Какие бы файлы "cookie" вы не использовали, помните о том, что вы
должны их записать до отправки в браузер любого другого содержимого, потому что файлы "cookie"
являются, в действительности, частью информации заголовка.
Если вы учтете это предупреждение, то и не потратите часы, чтобы выяснить, почему получаете сообщение
об ошибке Cannot add header information (Невозможно добавить информацию заголовка).
На Рис. 12.1 показан пример попытки неправильной записи файла "cookie".
Рис. 12.1. Пример неправильного сценария для записи файла "cookie".
Если вы попытаетесь загрузить такой файл в браузер, то получите сообщение об ошибке (Рис. 12.2).
Рис. 12.2. Сообщение об ошибке
Если вы увидите такое сообщение об ошибке, это, возможно, означает, что вы что-то уже послали в
Web-браузер раньше. Это может быть пробел, символ перевода строки или текст.
Функция setcookie ( ) записывает один файл "cookie" и ей надо передать шесть аргументов:
Name (Имя). Хранит имя переменной, которая будет содержаться в глобальной переменной
$HTTP_COOKIE_VARS и будет доступна в последующих сценариях.
value (Значение). Значение переменной, указанной в параметре Name.
Expiration (Истечение). Устанавливает определенное время, не дольше которого значение файла
"cookie" будет доступно. Время файлов "cookie" без указания этого параметра истечет, когда
Web-браузер будет закрыт.
Path (Путь). Определяет, для каких папок (каталогов) файлы "cookie" действительны. Если в
этом параметре присутствует один единственный символ косой черты (/), та файл "cookie"
действителен для всех файлов и папок (каталогов) Web-сервера. Если указана определенная папка,
то такой файл "cookie" действителен только для страниц, находящихся внутри этой папки.
Domain (Домен). Файл "cookie" действителен только для хоста и домена, которые записали его.
Если домен не определен, то, по умолчанию, значением является имя хоста сервера, который записывает
файл "cookie". В строке, определяющей этот параметр, должно быть не менее двух точек.
Security (Безопасность). Если этот параметр равен 1, то файл "cookie" будет передаваться только
по протоколу HTTPS.
Следующая ниже строка является примером записи файла "cookie" с именем id и значением
55sds809892jjsj2. Этот "cookie" будет действовать четыре часа (текущее время плюс 14400 секунд) и
будет действителен для всех страниц и папок внутри основной папки документов в домене youdomain.com.
setcookie ("id", "55sds809892jjsj2" , time( )+14400, "/", " • youdomain.com", 0);
Далее мы дадим небольшую шпаргалку для определения переменной времени, а затем приступим к использованию
переменных в файлах "cookie".
Подсчет Времени
Если вы хотите точно определить дату или время истечения файла "cookie", то проще всего рассчитать
его с помощью самого РНР и поместить значение в функцию Setcookie ( ). Это значение может быть
рассчитано вперед от текущего времени time ( ), с добавленными дополнительными.
В следующей ниже таблице показаны некоторые обычно используемые значения time( )+n для функции
setcookie ( ).
Т а б л и ц а 12.1. значения time( )+n для функции setcookie( ).
Значение |
Определение |
time ( ) + 60 |
Одна минута от текущего времени
|
time ( ) + 900 |
15 минут от текущего времени
|
time ( ) + 1800 |
30 минут от текущего времени |
time ( ) + 3600 |
Один час от текущего времени |
time ( ) + 14400 |
Четыре часа от текущего времени |
time ( ) + 43200 |
12 часов от текущего времени |
time ( ) + 86400 |
24 часа от текущего времени |
time ( ) + 259200 |
Три дня от текущего времени |
time ( ) + 604800 |
Одна неделя от текущего времени |
time ( ) + 2592000 |
30 дней от текущего времени |
Запись пробного файла "cookie"
Цель этого небольшого сценария запись пробного файла "cookie" и последующий вывод сообщения на экран.
Перед началом создания сценария вам необходимо выполнить некоторые дополнительные настройки в вашем
браузере, чтобы он отображал предупреждение перед записью файлов "cookie". Это единственный способ
увидеть файл "cookie" при попытке браузера записать его на ваш компьютер.
Запустите свой Web-браузер и выберите команду меню Сервис\Свойства обозревателя.
На экране появится диалог Свойства обозревателя (Рис. 12.3).
Рис. 12.3. Диалог Свойства обозреваетеля
Перейдите на вкладку Безопасность(Рис. 12.4).
В области Выберите зону Интернета, чтобы присвоить ей уровень безопасности
выберите Местная интрасеть.
Рис. 12.4. Вкладка Безопасность диалога Свойства
обозревателя
В группе элементов управления Уровень безопасности для этой зоны
нажмите кнопку Другой. На экране появится диалог Параметры безопасности (Рис. 12.5).
Рис. 12.5. Диалог Правила безопасности
Прокрутите список Настройка и найдите строку Файлы "cookie" (Cookies).
Установите переключатель Разрешить использование во время сеанса файлов "cookie"
(которые хранятся на вашем компьютере) в положение Предлагать.
Нажмите кнопку ОК. На экране появится предупреждение об изменении настройки безопасности (Рис. 12.6).
Рис. 12.6. Предупреждение об изменении настройки безопасности
Нажмите кнопку Да (Yes). Диалог Правила безопасности будет закрыт.
В диалоге Свойства обозревателя нажмите кнопку Применить,
а затем ОК, чтобы закрыть диалог. Изменения вступили в силу.
Создайте с помощью текстового редактора новый файл.
Начните РНР-блок:
Чтобы создать переменные с именами $oookie_name, $cookie_value, $cookie_expire, $cookie_domain,
введите код:
Подставьте в значение переменной $cookie_domain ваше собственное доменное имя.
Чтобы записать пробный файл "cookie", используя функцию setcookie( ), введите код:
Закройте блок РНР:
Введите следующий блок HTML:
Сохраните созданный файл с именем setcookie.php в папке для документов вашего Web-сервера.
Созданный вами файл должен выглядеть, как показано на Рис.12.7.
Рис 12.7. Полный листинг файла setcookie.php
Запустите свой Web-браузер, в поле ввода Адрес введите
http://localhost/setcookie.php
и нажмите клавишу Enter.
В рабочем окне браузера появится страница Установка пробного Cookie (Рис. 12.8).
Рис. 12.8. Страница Установка пробного Cookie
Использование переменных файлов "cookie"
Существует момент, касающийся использования файлов "cookie", о котором многие забывают до тех пор,
пока не потратят несколько часов, пытаясь отладить то, что не нуждается в отладке (с автором такое
однажды было). Дело в том, что когда Web-браузер получил файл "cookie", вы не можете извлечь его
значение до тех пор, пока не будет сделан следующий HTTP-запрос.
Другими словами, если вы записали файл "cookie" с именем "name" и значением "Иванов" на
первой странице, то вы не сможете извлечь это значение до тех пор, пока пользователь не перейдет на
страницу 2 (или страницу 5, или 28 - на любую другую страницу, кроме той, на которой первоначально
был записан файл "cookie").
Использование файлов "cookie" для аутентификации пользователя
В сценарии аутентификации, который мы создали в предыдущей главе, у нас была регистрационная форма и
страница с результатом. Однако аутентификация была действительна только для одной результирующей страницы,
потому что она динамически отображала «секретное» содержимое (в нашем случае сообщение Поздравляем!
Вы успешно прошли аутентификацию!). Если вам потребуется аутентификация для ряда статических страниц,
вы должны сделать в сценарии небольшие исправления.
Откройте созданный в предыдущей главе файл сценария do_authuser.php с помощью текстового редактора.
Прокрутите текст вниз и найдите блок оператора if. . .else, который анализирует результат
аутентификации, и добавьте следующий код:
Функция setcookie( ) посылает файл "cookie" с именем auth и значением ok. Он будет
действителен на время всей сессии браузера и для всех папок на сервере Localhost.
Удалите строку, содержащую код:
Добавьте следующие строки:
Страницы, указанные в маркированном списке, мы скоро создадим.
Прокрутите текст сценария дальше и найдите строку:
Замените ее следующей строкой:
Сохраните измененный файл.
Запустите свой Web-браузер, в поле ввода Адрес введите
http://localhost/show_login.html
и нажмите клавишу Enter.
B рабочее окно браузера будет загружена страница Регистрационная форма (Рис. 12.9).
Рис. 12.9. Страница Регистрационная форма
Введите в поля ввода Регистрационное имя (login) и Пароль действительные имя и пароль
пользователя из таблицы auth_users.
Нажмите кнопку Регистрироваться. В рабочее окно браузера будет загружена страница Скрытая область,
содержащая скрытое меню (Рис. 12.10).
Рис. 12.10. Страница Скрытая область с «секретным» меню
Пpoвeркa аутентификационного файла "cookie"
«Секретное» меню, которое мы создали, содержит ссылки на два файла: sekretA.php и sekretB.php.
Добавив фрагмент кода в начало этих страниц, вы сможете проверить, зарегистрирован ли пользователь
Создайте с помощью текстового редактора новый файл.
Начните блок РНР:
Чтобы начать оператор if. . .else, который будет анализировать значение переменной $auth,
введите код:
Чтобы создать переменную для хранения сообщения для зарегистрированного пользователя, введите код:
Чтобы вернуть незарегистрированного пользователя на страницу регистрации, введите код:
Незарегистрированные пользователи - это те пользователи, кто пытается попасть на страницу secretA.php
напрямую, минуя процесс аутентификации.
Закройте блок РНР:
Начните блок HTML:
Чтобы вывести на страницу сообщение, введите код:
Чтобы завершить HTML-документ, введите код:
Сохраните созданный файл с именем secretA.php в папке для документов вашего Web-сервера.
Содержимое файла secretB.php практически не отличается от файла secretA.php, разница только
в текстах сообщений.
Создайте с помощью текстового редактора новый файл.
Начните РНР-блок:
Чтобы начать оператор if. . .else, который будет анализировать значение переменной $auth,
введите код:
Чтобы создать переменную для хранения сообщения для зарегистрированного пользователя, введите код:
Чтобы вернуть незарегистрированного пользователя на страницу регистрации, введите код:
Закройте блок РНР:
Начните блок HTML:
Чтобы вывести на страницу сообщение, введите код:
Чтобы завершить HTML-документ, введите код:
Сохраните созданный файл с именем secretB.php в папке для документов вашего Web-сервера.
Теперь все готово к проверке. Если вы не закрыли свой браузер, то файл "cookie" все еще действует,
и вы видите в его рабочем окне «секретное» меню.
Щелкните мышью на ссылке скрытая страница А. В рабочее окно браузера будет загружена страница
Скрытая страница А (Рис. 12.1).
Рис.12.1. Страница Скрытая страница А
Вы видите на странице сообщение об успешной загрузке страницы.
Закройте Web-браузер с помощью кнопки , расположенной в правой части заголовка окна.
Теперь срок действия файла "cookie" истек.
Вновь запустите свой Web-браузер, в поле Адрес введите
http://localhost/secretB.php
и нажмите клавишу Enter.
В рабочее окно браузера будет загружена страница Регистрационная форма (Рис. 12.9.)
Это окно появилось потому, что вы не прошли регистрацию, а срок действия файла "cookie" истек.
Введите в поля ввода Регистрационное имя (login) и Пароль действительные имя и пароль пользователя
из таблицы auth_users.
Нажмите кнопку Регистрироваться. Если вы не изменяли настройки системы безопасности, то на экране
появится диалог Предупреждение системы безопасности (Security Alert) с данными о файле "cookie"
(Рис. 12.10).
Нажмите кнопку Да. В рабочее окно браузера будет загружена страница Скрытая область,
содержащая «секретное» меню (Рис. 12.10).
Щелкните мышью на ссылке скрытая страница В. В рабочее окно браузера будет загружена страница
Скрытая страница В (Рис. 12.12).
Рис. 12.12. Страница Скрытая страница В
Этим примером использования файлов "cookie" вы завершаете краткое знакомство с аутентификацией
пользователей. Дополнительную информацию, советы и техническую поддержку по этой теме вы можете
найти в Интернете по адресу www.thickbook.com в разделе Extra.
|