Реализация механизма cookies представлена единственной функцией setcookie(). Как и в случае с HTTP заголовками, эта функция должна быть вызвана до отправки каких–либо данных удаленному клиенту, не допускаются даже «пустые» символы, то есть пробел, символы перевода строки и так далее.
Функция имеет следующий синтаксис:
setcookie(имя куки, значение, срок годности, информация о пути, домен, защищенность) |
Все параметры, кроме имени cookie, являются необязательными. Значением, которое несет cookie, может быть любая строка ASCII символов. Например, можно установить cookie с именем и фамилией посетителя, которые он до этого ввел в поле формы.
$data = $_POST["name"]."||".$_POST["surname"];
setcookie("username", $data);
Заметьте, что отсылаемые данные должны быть оформлены в виде строки, попытка прочитать отосланный ранее массив значений ни к чему не приведет. Для того чтобы сохранить в cookie массив, следует упаковать его в строку с помощью функции serialize(), а при извлечении распаковать обратно в массив при помощи функции unserialize().
|
|
Cookie, установленная в вышеуказанном примере, будет уничтожена сразу после закрытия браузера пользователем, так как по умолчанию срок жизни cookie устанавливается в ноль. Чтобы изменить этот порядок, необходимо указать третий параметр expire. Определение этого параметра можно произвести двуми способами:
– задать отностительный срок действия с помощью функции time(), к которой прибавляется время в секундах для хранения cookie. Например, чтобы определить cookie на два часа необходимо написать:
setcookie("test 1", "это тестовая куки", time() + 3600 * 2);
Второй способ – задание абсолютного срока истечения годности cookie. Он устанавливается с помощью функции mktime(), которая возвращает конкретную дату удаления куки. Если необходимо задать срок жизни cookie до полуночи 1 сентября 2008 года, то следует определить cookie так:
setcooikie("test 2", "куки с абсолютной датой удаления", mktime(0, 0, 0, 9, 1, 2008);
Необязательный параметр пути ограничивает область действия cookie в пределах определенных директорий. Причем в эту область входят все пути, начинающиеся со значения в этом параметре. Например:
setcookie("test 3, "", 0, "/mus");
Мы установили cookie, пропустив параметры значения и времени и определив область действия всеми путями, начинающимися со строки "/mus", то есть сюда входят и директория "/music/", и "/museums/". Чтобы однозначно определить путь, необходимо завершить путь слешем. То есть для ограничения действия куки каталогом "/mus", необходимо было написать в параметре "/mus/".
Следующим опциональным параметром является параметр определения действия cookie в пределах указанного домена. Причем значению этого параметра "someserver.com" соответствует только сайт с адресом http://someserver.com, а значению ".someserver.com" соответствуют уже и http://someserver.com, и http://mail.someserver.com, и http://my–someserver.com, то есть все домены, кончающиеся данной строкой.
|
|
Последний параметр функции setcookie() указывает на то, что данная cookie должна быть послана через защищенное соединение (HTTPS). Этот параметр необходим при установке cookie с конфеденциальными данными.
setcookie("my_cookie", $value, time() + 3600 * 24 * 5, "/", ".someserver.com", 1);
Обращение к данным, сохраненным в cookie, происходит через суперглобальный массив $_COOKIE, используя в качестве индекса имя cookie. Например, продолжая пример выше, прочесть cookie можно следующим образом:
echo "У вас сохранены следующие данные:<br>";
echo $_COOKIE["my_cookie"];
Удаление cookie производится отправкой новой cookie с именем удаляемой без каких–либо дополнительных параметров.
Например:
$data = $my_cookie;
setcookie("my_cookie");
echo "Следующие данные были удалены:<br>". $data;