Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
WEB - Лабораторная работа_5 - PHP.pdf
Скачиваний:
91
Добавлен:
26.03.2015
Размер:
312.5 Кб
Скачать

8. Механизм Cookies

1. Принцип работы механизма Cookies

Мне не хочется забивать вам голову техническими подробностями, поэтому я кратко скажу, что такое Cookies и, нет, не с чем их едят, а как с ними нужно работать.

Представим, что перед нами поставлена такая задача: нужно написать индивидуальный счетчик посещения для каждого клиента сайта нашей компании. То есть, чтобы пользователь знал, сколько раз именно он был на нашем сайте, а не видел общее количество посещений.

Можно решить данную задачу двумя способами. Первый способ заключается в том, чтобы вести учет по IP-адресу. Для этого нужна база данных, состоящая всего из одной таблицы, структура которой примерно такова:

IP-адрес

Посещения

111. 111.111.111

23

111.123.215.211

100

 

 

Когда пользователь заходит на наш сайт, нам нужно определить его IP, найти в базе данных информацию о его посещениях, увеличить счетчик на единицу и вывести его в браузер. Определять IP-адрес клиента мы уже сумеем (переменная $REMOTE_ADDR), поэтому нам несложно написать такую программу. Однако при использовании данного способа рано или поздно «всплывут» две проблемы:

Для каждого IP-адреса нужно будет вести учет в одной таблице, которая, скорее всего, будет большой, а из этого следует, что мы нерационально используем процессорное время и дисковое пространство. Гораздо правильнее с нашей стороны будет использовать это пространство с большей пользой.

У большинства домашних пользователей IP-адреса динамические. То есть, сегодня у него адрес 111. 111.111.111, завтра —- 111.111.111.118. И попробуй потом определить, кто есть кто. Можно ввести регистрацию с использованием

имени пользователя и пароля, но это еще больше увеличит нашу базу данных и создаст неудобства для клиентов.

Ясное дело, что данный способ нам не поможет. Остается использовать второй способ, который намного легче в реализации. Мы устанавливаем Cookie — переменную, которая будет храниться на диске у пользователя. Эта переменная и будет хранить информацию о посещениях. Она будет считываться сценарием при обращении пользователя к серверу. Выгода очевидна. Во-первых, нам не нужно хранить ненужную информацию о IP-адресах, во-вторых, нам не страшны динамические IP-адреса, поскольку данные о своих посещениях хранятся у клиента.

Теперь нам ясно, для чего используются Cookies — для хранения небольшой по объему информации у клиента, например, его логина (но ни в коем случае не пароля!), настроек сайта (цветовая гамма, язык, и т.д.) и другой информации.

Почему небезопасно хранить пароль в Cookies? Получив от сервера Cookie- переменную, браузер сохраняет ее на диске в открытом виде, то есть, не кодируя ее. Любой, кому не лень, может просмотреть значения этой переменной. Кроме того в некоторых браузерах Cookies вообще сохраняются в обыкновенном тектовом файле, а некоторые - даже позволяют просмотреть их. Например, в браузере Mozila для просмотра

Сооkies выполните команду меню Edit-Preference-Security-Cookes

В этом разделе ны можете включить (Enable) или отключить (Disable) прием Cookies, установить максимальный срок хранения Cookie (Limit maximum lifetime):

Current session (Текущая сессия) — переменная будет удалена по окончании сессии работы с сайтом (например, когда пользователь закроет окно сайта).

Установить определенное количество дней, по истечении которых все принятые Cookies будут удалены.

Очень не рекомендую устанавливать режим запрос на прием Cookies (Ask me before storing a cookie) — многие сайты устанавливают Cookies, и этот режим очень скоро вам надоест.

Нажмите кнопку Manage Stored Cookies. Появится окно с информацией обо всех установленных Cookies

Щелкните на имени установленной Cookie-переменной, чтобы получить информацию о ней:

Name — имя переменной;

Information — информация, которую содержит Cookie;

Host — узел, установивший переменную;

Secure Server — признак того, что Cookie должна передаваться через защищенное (HTTPS) соединение:

Expires — время жизни Cookie. Значение at end of session означает, что Cookie будет «жить» до конца сессии.

Кнопка Remove Cookie удаляеттекущую переменную, а кнопка Remove All Cookies удаляет iscc Cookie-переменные.

Вы часто покупаете товары в Интернет-магазинах? Тогда рекомендую время от времени (скажем, раз в месяц) удалять все Cookies. Зачем? Вы увидите, что цены станут ниже. Дело в том, что некоторые Интернет-магазины (особенно, «буржуйские») грешат на доверии клиентов. Пару раз они могут продать вам товар по заниженным пенам, затем вы, зная, что это самый дешевый в Интернете магазин, будете покупать товары только у них. А они как раз и воспользуются Cookies — будут сознательно завышать цены на все товары, когда вы в очередной раз будете делать покупку, уверяя себя, что экономите деньги. При этом с помощью Cookies Интернет-магазины будут определять, кто вы такой и что вы раньше покупали.

Однако не нужно совсем отключать Cookies. Некоторые сайты станут загружаться некорректно. Если вы боитесь, что через Cookies можно получить вирус, то не беспокойтесь: даже если кто-то передаст вам с помощью Cookies «вредный код», то система не сможет его запустить, так как Cookies хранятся в текстовом виде (а в Linux для Cookies не устанавливается право за запуск файла).

Перед тем, как начать работу с Cookies, позволю себе пару замечаний относительно выбора браузера. Для отладки ваших сценариев, если они используют Cookies, я рекомендую использовать браузер Mozilla, поскольку он позволяет эффективно управлять Cookies. Если этот браузер вас почему-то не устраивает, используйте Konqueror, который также позволяет просмотреть подробную информацию о полученных Cookies. Браузеры Internet Explorer версий 4 и 5 не позволяют этого сделать.

2. Программирование Cookies

Установка Cookies

Вот теперь можно приступить к программированию Cookies. Для установки Cookies используется функция SetCookie. В общем случае для этой функции можно указать целых шесть параметров, но обязательный из них является только один — пате:

namе — задает имя (строка), закрепленное за Cookie.

value — определяет значение переменной (строка).

expire — время жизни переменной (целое число). Если этот параметр не указан, Cookie будет «жить» до конца сессии, то есть до закрытия браузера. Если время указано, то, когда оно наступит, Cookie самоуничтожится.

path — путь к Cookie (строка).

domain — домен (строка). В качестве значения устанавливается имя хоста с которого установили.

secure — передача через HTTPS-соединение.

Обычно используются только три первые параметра. В листинге 4 приведены несколько примеров установки Cookies.

Листинг 4. Примеры установки Cookies

<?

/./ До конца сессии

SetCookie("Test","Value");

.// Время жизни - один час после установки

SetCookie("My_cookie", "One hour",time()+3600); ?>

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

невозможна: Warning: Cannot add header information - headers already sent by (output started at /var/www/html/cookie.php: 2) in /var/www/ html/cookie.php on line 4

Чтение значений Cookies

Получить доступ к Cookies достаточно просто. Все они хранятся к переменной окружения НТТР_СООК1Е. Если мы установили несколько Cookies, то в переменной НТТР_СООК1Е они будут перечислены через «;» (через точку с запятой). Например: mycookiel=valuel;mycookie2=value2.

Для чтения значения Cookies можно обращаться к ним, как к обыкновенным переменным. Например: echo $Test; Только не забудьте проверить существование переменной. В заключение приведу пример «индивидуального счетчика» посещений. Код сценария приведен в листинге 5.

Листинг 5. Индивидуальный счетчик с помощью Cookies

//Если переменная не существует, объзляем ее if ( ! isset(51na Counter); $lnd Counter = 0;

//Увеличиваем счетчик

$Ind_Counter++;

/* Устанавливаем Cookie которая будет жить до переустановки пользователем Windows, то есть очень долго. Если вам интересно, то браузер удалит ее 18/07 ,-'2 9 08:49 */

SetCookie ("Jnd_ Counter", $ I na_ Counter, Ox6FFFFFFF) ; echo "Вы посетили этот сайт $Ind_Counter раз"

? >

Выше я говорил, что перед установкой Cookies нельзя использовать оператор echo. Только что я сам допустил подобную ошибку. Если оператора echo и вашей программе нет (по крайней мере до вызова SetCookie()), a Cookies невозможно установить, убедитесь в том, что символы маркера начала программы — <? — являются первыми в файле. У меня только что была такая ситуация:

Начало сайта

\ n <?

Естественно, что символ \n я не увидел, а PHP «подумал», что это фрагмент HTML-документа. В результате Cookies не были установлены, так как Cookies устанавливаются при формировании заголовка документа, а после первого вывода сценария формирование заголовка прекращается.

Соседние файлы в предмете Программирование для Web