5. Использование cookie в языке PHP

Опубликовал в рубрике Лекции.

5.1 Установка cookie

Cookie – это текстовые строки, которые могут быть сохранены на компьютере клиента и затем переданы web-серверу при каждом обращении к нему. Таким образом можно организовать передачу данных между различными скриптами, не используя форм или передачу через URL. Для установки значения cookie используется функция setcookie, имеющая следующий синтаксис:

bool setcookie (string name [, string value [, int expire [, string path [, string domain [, bool secure ]]]]])

Функция описывает cookie, который должен быть сохранен на компьютере клиента. Ниже приведено описание параметров этой функции:

name − наименование cookie.

value − значение cookie. Так как оно сохраняется на компьютере клиента, не рекомендуется использовать cookie для хранения конфиденциальной информации.

expire − срок действия cookie. Если задан, то cookie удаляется после того, как срок его действия истек. Если не задан, то cookie удаляется после закрытия окна браузера. Для формирования срока истечения можно прибавить требуемое количество секунд к результату, возвращаемому функцией time (текущее время), или использовать функцию mktime для формирования абсолютного времени.

path − путь на сервере, в рамках которого cookie будет доступен. Для того чтобы cookie был доступен в пределах всего домена, следует указать строку ‘/’. По умолчанию используется текущий каталог скрипта, в котором происходит установка значения cookie.

domain − домен, для которого доступен cookie.

secure − признак того, что cookie следует использовать только при безопасном соединении по протоколу HTTPS. По умолчанию cookie доступен для соединений как по HTTPS, так и по HTTP.

Следует иметь в виду, что cookie являются частью заголовка HTTP-запроса, который отправляется браузеру, поэтому их значения должны быть установлены до начала формирования HTML-кода. Это означает, что вызов setcookie должен быть расположен до любых HTML-тегов и до любого оператора echo. Если не соблюдать это правило, то вызов setcookie вернёт значение FALSE, что означает ошибку при формировании cookie. При успешном формировании cookie функция возвращает значение TRUE, но это не гарантирует того, что cookie будет принят клиентом. Браузер может быть настроен так, что будет игнорировать все или определенные cookie, и на стороне сервера нет способа узнать это заранее.

Приведём пример, в котором создаётся cookie с именем «message» и текстом «Привет».

Пример 9.1. Установка значения cookie, phpsetcookie.php

<?php

setcookie («message», «Привет»);

?>

<HTML> <HEAD> <TITLE> Установка cookie </TITLE> </HEAD>

<BODY> <CENTER> <Н1>Установка cookie</H1>

Cookie установлен! Для просмотра следует перейти по ссылке <А HREF = «phpgetcookie.php»> phpgetcookie.php </A> </CENTER> </BODY> </HTML>

Соответствующая страница представлена на рис. 9.1. В момент просмотра страницы браузером cookie уже установлен.Рис.9.1 .Установка значения cookie

5.2 Чтение cookie

Сразу после того, как значение cookie установлено, оно не будет доступно скрипту до тех пор, пока страница не будет перезагружена. Это происходит потому, что cookie хранятся на компьютере пользователя и отправляются на web-сервер браузером при запросе очередной страницы. Кроме того, cookie отправляются только в том случае, если домен cookie совпадает с доменом запрошенного у сервера документа.

Для получения доступа к cookie используется суперглобальный массив $_СООКIЕ. В качестве индекса массива используется имя cookie, использованное ранее. Массив заполняется автоматически при загрузке скрипта аналогично массивам $_GET, $_POST и $_REQUEST.

Перед использованием cookie необходимо удостовериться в том, что его значение установлено. Для этой цели используется функция isset. В примере 9.2 продемонстрирована такая проверка, и в случае наличия cookie с именем message его значение будет отображено, как показано на рис. 9.2.

Пример 9.2. Чтение значения соокiе, phpgetcookie.php

<HTML> <HEAD> <TITLE>Чтение значения cookie </TITLE> </HEAD> <BODY>

<CENTER>

<Н1>Чтение значения cookie</Hl> Cookie содержит значение:

<?php

if (isset ($_COOKIE ['message']) )

{

echo ‘Cookie содержит значение: ‘.$_COOKIE ['message'];

}

else

{

echo ‘Cookie не установлен’;

}

?>

</CENTER> </BODY> </HTML>

Рис. 9.2. Чтение значения cookie

Cookie могут быть также организованы в массивы, если использовать в их именах квадратные скобки. Например, можно установить три cookie следующим образом:

setcookie («cookie[one]«, «Понедельник»);

setcookie («cookie[two]«, «Вторник»);

setcookie («cookie [three]«, «Среда»);

В результате будет сформирован массив $_COOKIE ['cookie'] из трёх элементов, который может быть отображён, например, при помощи следующего фрагмента кода:

if (isset ($_COOKIE ['cookie']))

{

foreach ($_COOKIE’['cookie'] as $data)

{

echo «$data <BR>»;

}

}

5.3 Срок действия cookie

Помимо простой установки значении cookie, функция setcookie может установить и срок его действия. Срок действия задаёт временной интервал, в течение которого cookie будет сохраняться на компьютере пользователя. Если срок действия не задан, то cookie будет удалён после завершения сеанса работы (то есть после закрытия текущего окна браузера и всех окон, открытых из него). Срок действия определяется третьим параметром функции setcookie – expire, который задаёт время, когда cookie должен быть удалён с компьютера клиента. Для формирования значения expire можно воспользоваться функцией time, которая возвращает текущее время в стиле Unix. Например, если cookie должен быть удалён через час после его установки, параметр expire может быть задан как time () + 3 600:

<?php

setcookie(«mycookie», $value, time() + 3600);

?>

В примере 9.3 создаётся cookie со сроком действия 5 секунд для демонстрации того, что значение cookie будет удалено, если нажать на ссылку спустя это время.

Пример 9.3. Установка срока действия cookie, phpsetconfiguredcookie.php

<?php

setcookie(«message», «Привет», time()+5);

?>

<HTML> <HEAD> <TITLE>Срок действия cookie</TITLE> </HEAD>

<BODY>

<CENTER>

<Н1>Срок действия cookie</Hl>

Срок действия cookie установлен в 5 секунд. Поторопитесь перейти по ссылке

<А HREF=»phpgetcookie.php»> phpgetcookie.php</A> </CENTER> </BODY> </HTML>

Внешний вид этой страницы приведен на рис. 9.3. Если нажать на ссылку до истечения 5 секунд, будет отображено значение cookie, как на рис. 9.2. Если же перейти по ссылке после истечения срока действия cookie, то будет выведено со­общение о том, что значение cookie не определено (см. рис. 9.4).

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

Рис. 9.3. Установка cookie со сроком действия

 

Рис. 9.4. Срок действия cookie истек

5.4 Удаление cookie

Иногда возникает необходимость удалить установленный ранее cookie. Для этого следует вызвать функцию setcookie с теми же параметрами, что и при установке cookie, но передать в качестве аргумента value пустую строку «». Следует обратить особое внимание на то, что все остальные аргументы, заданные при установке cookie, должны обязательно присутствовать с теми же значениями, иначе требуемый результат не будет достигнут. Ниже приведен пример удаления cookie:

<?php

setcookie («message», «»);

?>

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

<?php

setcookie («message», «», time () − 3600);

?>

Ниже приведён пример удаления cookie с перенаправлением пользователя на скрипт phphgetcookie.php.

<?php

setcookie(«message», «», time() − 3600);

?>

<HTML> <HEAD> <TITLE> Удаление cookie </TITLE> </HEAD>

<BODY> <CENTER> <H1>Удаление cookie</Hl>

Cookie удален. Перейдите по ссылке <А HREF = «phpgetcookie.php»> phpgetcookie.php </A> </CENTER> </BODY> </HTML>

После перехода по гиперссылке будет выведено сообщение об отсутствии cookie (см. рис. 9.4).

  5 Использование cookie в языке PHP (109,0 Кб, 5 скачиваний)
You do not have permission to download this file.



Метки: , , , ,