Поиск

Что такое файлы cookie

Файлы cookie можно представить себе в виде билета в кинотеатр. Вы можете пойти в кассу кинотеатра и купить билет на любой удобный для вас сеанс. После этого вы вольны уйти, купить пакет воздушной кукурузы и заняться своими делами. Когда подойдет время сеанса, вам нужно предъявить билет контролеру, которого совершенно не интересует, как, когда или почему вы приобрели этот билет, но коль он у вас есть, контролер пропустит вас в кинозал. Билет дает право его предъявителю посмотреть кинофильм на более позднем (по сравнению с моментом покупки билета) сеансе.

Файлы cookie — это просто пакет информации, который CGI-программа "просит" сохранить броузер. Этот пакет броузер может в любое время переслать обратно этой или же другой CGI-программе. Файлы cookie передаются также обратно серверу при запросе обычных HMTL-страниц. Пакет cookie может содержать информацию любого вида: о многостраничных Web-формах, данные о посещаемости Web-страниц, предпочтениях пользователей и т.д.

Пакет cookie передается от сервера броузеру в случае, если CGI-программа запрашивает создание cookie (рис. 21.1), и этот процесс называется установкой cookie.

Пакет cookie может быть впоследствии использован CGI-программой, которой броузер отправляет информацию, сохраненную в этом пакете, как показано на рис. 21.2.

Откуда такое странное название — cookie?

В компьютерных кругах cookie — очень старый термин. Он относится к любому биту информации (передаваемому программами или подпрограммами), который позволяет владельцу cookie выполнить определенную операцию. Некоторые виды пакетов cookie называются magic cookies (магические пакеты cookie), поскольку они содержат данные, имеющие смысл только для их отправителя и получателя. CGI-cookie не относятся к числу магических.

Создание пакетов cookie

Для создания пакета cookie можно использовать функцию модуля CGI под именем cookie. Вот ее синтаксис:

Аргументы функции cookie передаются необычным способом. Каждый аргумент в обращении к функции cookie является именованным. Такой способ передачи аргументов в языке Perl очень удобен, поскольку не нужно помнить порядок следования аргументов: достаточно при использовании указать его имя.

После вызова с использованием этого синтаксиса функция cookie возвращает ссылку на объект типа cookie (ее нужно сохранить в скалярной переменной). Эта ссылка передается функции header модуля CGI, которая и отправляет пакет cookie броузеру. Единственным обязательным аргументом для создания файла cookie является аргумент -value. С помощью аргумента -name броузеру можно послать несколько пакетов cookie одновременно, при этом их выборка может быть как групповой, так и индивидуальной. Другие аргументы -expires, -path, -domain и -secure — будут рассмотрены в следующем разделе.

Функция header в модуле CGI выполняет передачу пакета cookie броузеру. Это значит, что вы должны создать пакет, используя функцию cookie, а затем вызвать функцию header. He следует посылать броузеру данные какого-либо другого типа до тех пор, пока не будут посланы файл cookie и заголовок.

Чтобы создать файл cookie и отослать его броузеру, можно использовать CGI-программу, текст которой приведен ниже:

После выполнения приведенного фрагмента программы файл cookie с именем Sample будет установлен в броузере. Новоиспеченный файл cookie будет содержать информацию Этот cookie не включает сообщений.

В действительности не исключено, что cookie окажется не установленным. Броузеры могут отказаться принять cookie, и для этого есть немало причин (см. раздел "Проблемы с файлами cookie" этого занятия).

Для считывания пакетов cookie из броузера в CGI-программу используется та же функция cookie. Вызванная без аргументов (как показано в следующих примерах), она возвращает список имен всех файлов cookie, которые броузер передал вашему серверу:

По умолчанию после установки в броузере файл cookie возвращается в любую CGI-программу, которая размещается на том же самом сервере, т.е. только тот сервер, который установил пакет cookie, может осуществлять их выборку. Чтобы просмотреть содержимое созданного выше файла cookie Sample, можно использовать другую CGI-программу:

В предыдущем фрагменте кода функция cookie была вызвана с одним аргументом — именем файла cookie, который нас интересует. Это значение считывается и выводится для просмотра.

Пакет cookie должен быть возвращен броузером до завершения его работы. После повторного запуска от нашего cookie Sample не останется и следа. Для создания более "устойчивых" пакетов cookie обратитесь к разделу "Сохранение файлов cookie" этого занятия.

Большинство броузеров обладают возможностью оповещения факта установки файлов cookie. В броузере Netscape соответствующие опции можно найти в разделе Preferences вкладки Advanced. А в броузере Internet Explorer вам придется для этого открыть вкладку Дополнительно (Advanced) диалогового окна Свойства обозревателя {Internet Options) и отыскать переключатель, управляющий режимом установки файлов cookie.
Пример: использование файлов cookie

В качестве примера создадим небольшую программу, с помошью которой можно будет менять в Web-броузере цвета просматриваемой в данный момент страницы. На самом деле эта программа выполняет сразу несколько функций, как описано ниже.

  1. Проверяет наличие изменения в цвете фона, установленного по умолчанию, путем проверки параметров программы.
  2. Устанавливает файл cookie в броузере с использованием нужного цвета фона.
  3. Устанавливает цвет фона страницы в соответствии с нужным цветом.
  4. Отображает CGI-форму, позволяющую выбрать цвет.

Программа изменения цвета Web-страницы представлена в листинге 21.1.

Проведем анализ программы.

  • Строки 7—10. Если эта CGI-программа вызывается для обработки данных HTML-формы, функция param( 'color') возвращает значение выбранного цвета. В противном случае значение переменной $requested_color остается неопределенным.
  • Строки 12—14. В этих строках программы проверяется факт существования файла cookie с именем bgcolor (его ведь может и не быть!). Если файл действительно существует, его содержимое (значение цвета фона экрана, сохраненное в файле cookie в последний раз) запоминается в переменной $old_color.
  • Строки 15—19. Если цвет изменен (содержимое файла cookie не совпадает с новым значением), нужно установить в броузере новый файл cookie с обновленным значением цвета.
  • Строки 20—24. В противном случае выводится только заголовок, без cookie. Учтите, что броузер будет сохранять предыдущий файл cookie неограниченно долго.
  • Строки 25—42. Здесь создается обычная форма HTML. Однако обратите внимание на строку 30 — именно в ней выполняется изменение цвета HTML-страницы.
Еще один пример: просмотр файлов cookie

Удивительно короткую программу просмотра файлов cookie, приведенную в листинге 21.2, можно рассматривать как вспомогательное средство при отладке CGI-программ, работающих с пакетами cookie. Эта программа выводит список всех пакетов cookie, хранимых в Web-броузере, которые считаны с одного и того же Web-сервера.

Проведем анализ программы.

  • Строка 10. Имена всех пакетов cookie считываются с помощью функции cookie и по очереди присваиваются переменной $cookie.
  • Строки 11~12. Выводится имя и значение каждого пакета cookie.

Работа этой программы просмотра основана на получении списка всех доступных пакетов cookie с помощью функции cookie(), получении значения каждого пакета и распечатке его вместе с именем cookie.