Введение в Cookies

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

cookie это небольшая порция информации, которую сервер передает клиенту. Клиент (броузер) будет хранить эту информацию и передавать ее серверу с каждым запросом как часть http заголовка. Некоторые cookie хранятся только в течение одной сессии, они удаляются после закрытия броузера. Другие, установленные на некоторый период времени, записываются в файл. Обычно этот файл называется 'cookie.txt'.

Что можно делать с помощью cookie?

Сами по себе cookies не могут делать ничего, это только лишь некоторая информация. Однако, сервер может на содержащуюся в cookies информацию. Например, в случае авторизованного доступа к чему либо через www, в cookies сохраняется login и password в течение сессии, что позволяет не вводить их при запросе каждого запаролированного документа. Другой пример: cookies могут использоваться для построения персонализированных страниц. Чаще всего встречается такое - на некотором сервере Вас просят ввести свое имя, и каждый раз, когда Вы заходите на первую страницу этого сервера, Вам пишут что-то типа "hello, your_name!". На использовании cookies также часто строят функцию оформления заказа в онлайновых магазинах, в частности, в Амазоне, такая своеобразная виртуальная корзина покупателя, как в обычном реальном супермаркете.

Какие броузеры поддерживают механизм cookies?

Не все, конечно, однако самые популярные поддерживают. Я точно знаю, что netscape (начиная с самой первой версии), microsoft ie (трешка и четверка - точно, про предыдущие не знаю), mosaic

Установка cookie.

Как выставлять cookies клиенту зависит от того, как они будут использоваться в дальнейшем. Это можно делать как с помощью скриптов,так и с помощью meta-тагов html. Можно манипулировать временем жизни выставленных cookies и устанавливать место, в котором установки действительны. Общий формат установки таков: set-cookie: name=value; expires=date; domain=domain_name; path=path; secure

Установка cookie с помощью html.

Простейший способ выставить cookie - использовать соответствующий meta-таг в заголовке любого статического html документа.

Установка cookie с использованием perl/cgi.

Другой способ выставить cookie - с помощью серверного скрипта. На perl это будет выглядеть примерно следующим образом: перед тем как выдавать серверный ответ генерируется http заголовок

print "content-type: text/htmln";
print "set-cookie: username=aaa13; expires=friday,31-dec-99 23:59:59 gmt; path=/win/internet/html/; domain=citforum.ru;nn";

Чтобы прочитать скриптом значение cookie, которое было установлено ранее, и соответствующим образом выполнить скрипт, используется переменная окружения http_cookie. На perl это будет выглядеть так:

$cookie = $env{'http_cookie'};

При использовании ssi для просмотра значения cookie можно применить директиву:

Установка нескольких cookie одновременно.

Как с помощью html, так и с помощью скриптов можно устанавливать несколько cookie разом:


perl/cgi:

print "content-type: text/htmln";
print "set-cookie: name=value; expires=date; path=path;
domain=domain_name; securen";
print "set-cookie: name=value; expires=date; path=path;
domain=domain_name; securenn";

cookies в php

Рассмотрим простейший пример - установка на компьютере пользователя булки с информацией о том, был он на этой странице или нет. Это делается так:

setcookie ("visted","true");

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

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

Как видите, мы можем указать не только имя cookie и значение, но также и время действия (expire - в секундах, прошедших с 1970-го года), путь (стандартное значение "/"), домен ("домен.установившего.куки.скрипта") и секьюрность (0), т.е. также и область действия cookie.

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

if (!empty($http_cookie_vars["count"]))
{
$howmuch = $http_cookie_vars["count"];
} else
{
$howmuch = 0;
};
$howmuch++;
setcookie("count",$howmuch,time() + 3600);

print "Вы на этой странице $howmuch-й раз.";

?>

Как видите, для начала мы проверяем, есть ли уже на компьютере пользователя cookie с именем "count", и, если его нет, считаем, что пользователь был на странице 0 раз. Доступ к информации из cookie может быть получен двумя способами: во-первых, если в php.ini установлена настройка register_globals, автоматически создается переменная $count, во-вторых, добавляется значение в массив $http_cookie_vars. Более правильным является использование второго способа, т.к. php очень любит создавать переменные, и в этом случае мы просто не знаем - породилась ли эта переменная в результате передачи скрипту данных в query_string, через метод post или через cookie. Кроме того, в последних версиях php (4.2) функция register_globals по умолчанию отключена, так что остается вообще только один способ получить информацию.

Следующим шагом является прибавление к счетчику посещений единички. Логично - пользователь ведь зашел на страницу? Значит, увеличил количество посещений на единичку. Затем (до выдачи каких-либо надписей) мы должны установить cookie c новой информацией, действующий час. Чтобы получить время в секундах от 1970-го года, используется функция time(), к которой мы прибавляем искомое время (3600 секунд). Следует отметить, что время устанавливается в часовом поясе пользователя, так что запросто может оказаться, что время жизни cookie уже истекло. С этим надо бороться!

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

Внимание! cookies можно устанавливать только до какой бы то ни было выдачи текста! Проследите, чтобы до использования setcookie не было операторов print. Сообщения об ошибках тоже портят нам установку cookie. Вся проблема заключается в том, что информация о cookie относится к области заголовков, а то, что выдает print - нет.

Но мы должны не только уметь добавить cookie, но и удалить... Это делается все той же многострадальной функцией setcookie, только на этот раз мы вызываем ее с одним единственным параметром - именем cookie:

setcookie("count");
21 января 2007 в 10:52
{"url":"myid=106", "src":"http://profit-partner.ru/images/bloggers/pb_720x90.swf?myid=106", "width":"720", "height":"90"}
Вам понравился сайт или конкретно эта страница? Поделитесь ею со своими друзьями, нажав на одну из кнопок соцсетей слева или снизу. Желаете быть в курсе последних обновлений сайта — подпишитесь удобным для вас образом:
или поддержите нас, нажав на кнопку "Мне нравится" ниже!
Ещё статьи
Ваш комментарий будет первым
имя
Осталось символов: 4000
емайл
секретный код  секретный код
АВТОМАТИЧЕСКОЕ продвижение сайта
{"url":"http://ru.wix.com/eteamhtmlru/website-builder?utm_campaign=ma_ru_internet-technologies.ru&experiment_id=ma_ru_internet-technologies.ru240*400_people-comp_website_builder", "src":"/images/advertising/wix/wix240x400_people-comp.jpg", "alt":"Создать сайт - легко!"}
Обсуждения
{"url":"http://www.fastvps.ru/", "src":"/images/advertising/fastvps.gif?1", "alt":"Хостинг Fastvps.ru. Наш выбор!"}
Заработок
А, примут ли Ваш сайт в РСЯ?