РНР 5 в подлиннике

Страница 50 из 554


102

Часть I. Основы Web-программирования

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

Установка cookie

Мы подошли к вопросу: как же сценарий может установить cookie в браузере пользователя? Ведь он работает "на одном конце провода", а пользователь — на другом. Решение довольно логично: команда установки cookie — это просто один из заголовков ответа, передаваемых сервером браузеру. То есть, перед тем как выводить content-type, мы можем указать некоторые команды для установки cookie. Выглядит такая команда следующим образом (разумеется, как и всякий заголовок, записывается она в одну строку):

Set-Cookie: name=value; ехр±геэ=дата; domain=jffloi хоста; path=nyrb; secure

Существует и другой подход активизировать cookie — при помощи HTML-тега <meta>. Соответственно, как только браузер увидит такой тег, он займется обработкой cookie. Формат тега следующий:

<meta

http-equiv="Set-Cookie"

content="name=value; ехрхгез=дата; domain=i-ara_xoCTa; path=nyrb; secure"

Мы можем видеть, что даже названия параметров в обоих способах одинаковы. Какой из них выбрать — решать вам: если все заголовки уже выведены к тому моменту, когда вам потребовалось установить cookie, используйте тег <meta>. В противном случае лучше взять на вооружение заголовки, т. к. они не видны пользователю, а чем пользователь меньше видит при просмотре исходного текста страницы в браузере — тем лучше нам, программистам.

Возможно, вы спросите, нахмурив брови: "Что же, с точки зрения программиста хороший пользователь— слепой пользователь?" Тогда мы ответим: "Что вы, нет и еще раз нет! Такой пользователь хорош лишь для дизайнера, для программиста же желателен пользователь безрукий (или, по крайней мере, лишенный клавиатуры и мыши)".

Вот что означают параметры cookie.

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

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

>

О name

О value

Гпава 3. CGI изнутри

103

О expires

Необязательная пара ехр1геБ=дата задает время жизни нашего cookie. Точнее, cookie самоуничтожится, как только наступит указанная дата. Например, если задать

expires=Sunday, 2-Feb-03 15:52:00 gmt

то "печенье" будет "жить" только до 2 февраля 2003 года. Кстати, вот вам и вторая неприятность: хорошо, если мы знаем наверняка время "смерти" cookie. А если нам нужно его вычислять на основе текущего времени (например, если мы хотим, чтобы cookie существовал 10 дней после его установки, как в подавляющем большинстве случаев и происходит)? Придется использовать функцию, которая формировала бы календарную дату в указанном выше формате. Кстати, если этот параметр не указан, то временем жизни будет считаться вся текущая сессия работы браузера, до того момента, как пользователь его закроет.

П domain

Параметр йота±п=имя_хоста задает имя хоста, с которого установили cookie. Ранее мы уже говорили про этот параметр. Так вот, оказывается, его можно менять вручную, прописав здесь нужный адрес, и таким образом "подарить" cookie другому хосту. Только в том случае, если параметр не задан, имя хоста определяется браузером автоматически.

□ path

Параметр path=nyrb обычно описывает каталог (точнее, URI), в котором расположен сценарий, установивший cookie. Как мы видим, этот параметр также можно задать вручную, записав в него не только каталог, а вообще все, что угодно. Однако при этом следует помнить: указав хост, отличный от хоста сценария, или путь, отличный от URI каталога (или родительского каталога) сценария, мы тем самым никогда больше не увидим наш cookie в этом сценарии.

□ secure

Этот параметр связан с защищенным протоколом передачи HTTPS, который в книге не рассматривается. Если вы не собираетесь писать сценарии для проведения банковских операций с кредитными карточками (или иные, требующие повышенной безопасности), вряд ли стоит обращать на него внимание.

После запуска сценария, выводящего соответствующий заголовок (или тег <meta>), у пользователя появится cookie с именем name и значением value. Еще раз напоминаем: значения всех параметров cookie должны быть URL-кодированы, в противном случае возможны неожиданности.

Получение cookies из браузера

Получить cookies для сценария несколько проще: все они хранятся в переменной окружения нттр_соок1е в таком же формате, как и query_string, только вместо символа & используется ;. Например, если мы установили два cookies: cookiei=vaiuei и cookie2=vaiue2, то в переменной окружения http__cookie будет следующее:

cookiel=valuel;cookie2=value2

Сценарий должен разобрать эту строку, распаковать ее и затем работать по своему усмотрению.




  Hostland.Ru

 «Бесплатный хостинг Hostland.Su» © 2006