Содержание

Что такое Cookie

Cookie (куки, печенье) - это небольшой объем именованных данных(в текстовом виде), сохраняемых браузером и связанных с определенной WEB- страницей или WEB- сайтом. Cookies играют роль памяти веб браузера, чтобы сценарии и программы на стороне сервера могли на одной странице работать с данными, введенными на другой странице, или чтобы браузер мог вспомнить пользовательские параметры или другие переменные состояния, когда возвращается на страницу, посещенную им ранее. Cookies первоначально предназначались для разработки серверных сценариев и на низшем уровне реализованы как расширение протокола Коды состояния HTTP. Методы и структура протокола HTTP. Данные cookie автоматически передаются между веб броузером и веб сервером, так что серверные сценарии могут читать и записывать значения cookie, сохраняемые на стороне клиента.

Cookie описаны в RFC 2965. Cookie файлы рассчитаны на то, чтобы изредка сохранять небольшие объемы данных. Они не являются универсальным средством взаимодействия или механизмом передачи данных, поэтому следует проявлять умеренность при их использовании. Спецификации RFC 2965 рекомендуют производителям браузеров не ограничивать число и размеры сохраняемых cookie файлов. Однако ограничения могут существовать:

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

Установка значения любого из этих атрибутов(expires, max age) заставляет браузер сохранить cookie в локальном файле, чтобы он мог быть прочитан при следующем посещении пользователем веб страницы. После того как будет достигнута дата окончания действия expires или истечет период max age, браузер автоматически удалит cookie файл.

Cookie определяются тройкой параметров имя-домен-путь (name-domain-path). Т.е cookie- файлы с разными путями или доменами являются разными cookie, даже если имеют одинаковые имена. Соответственно, cookie меняется на новое, только если новое cookie имеет те же имя, путь и домен. В остальных случаях новые значения cookie добавляются к старым.

Приватность, сторонние cookie. Рекомендации.

Хотя cookies отправляются только на серверы домена, для которого они предназначены, веб- страница может подгружать изображения или другие компоненты из других доменов. Cookies, получаемые во время загрузки этих компонентов из других доменов, называются "сторонними".

Рекламные компании используют сторонние куки для отслеживания перемещений пользователя по сайтам. В частности, рекламная компания может отслеживать пользователей на всех сайтах, где установлены их рекламные баннеры. Знание страниц, посещённых пользователем, позволяет менять направленность рекламы в зависимости от предпочтений пользователя.

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

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

Рекомендации по созданию cookies- файлов.

Пользователь при помощи JavaScript может изменить cookies- файлы. Более того, существует возможность заменить сессионные куки постоянными. Серверное программное обеспечение должно отслеживать такие попытки. Для этого сервер выдаёт куки на определённый срок и записывает дату окончания куки у себя каждый раз, когда пользователь обращается к серверу. Если куки, присланный браузером, имеет дату действия отличную от той, что хранится на сервере, значит имеет место попытка подмены даты действия куки. Сервер может отреагировать, например, запросив у пользователя повторную авторизацию. Или изначально установить флаг HttpOnly в заголовке Коды состояния HTTP. Методы и структура протокола HTTP Set-Cookie, который делает cookies недоступными для скриптов со стороны клиента.

На сервере обычно хранят время последней активности пользователя. И время действия куки зависит от типа ресурса, например на форумах от 3 дней, до месяца, на админских панелях 1 день.

При начале новой сессии ID (уникальную строку) в файле куки нужно менять каждый раз. Это нужно для безопасности, чтобы другой человек похитив эту ID- строку не мог пользоваться аккаунтом жертвы постоянно. Также строку нужно менять при каждом вводе пользователем логина и пароля.

cookie (HTTP и/или JavaScript)

Cookies могут быть установлены в браузер (или иной другой программе) двумя способами:

  1. JavaScript работает с cookie с помощью свойства cookie объекта Document. Проверить включены ли cookies можно через Object Navigator.
  2. при помощи протокола Коды состояния HTTP. Методы и структура протокола HTTP в котором предусмотрены два параметра (заголовка) Set-Cookie(сервер указывает принять куку) и Cookie(ответ браузера). Кроме пары имя/значение(name=newvalue), куки может содержать срок действия, путь и доменное имя. Эти атрибуты должны идти после пары name=newvalue и разделяться точкой с запятой. Например:
Set-Cookie: name=newvalue; expires=date; path=/; domain=.example.com.
или 
Set-Cookie: RMID=732423sdfs73242; expires=Fri, 31 Dec 2010 23:59:59 GMT; path=/; domain=.example.net

Домен и путь говорят браузеру, что cookie должна быть отправлена обратно на сервер при запросах Что такое ссылка URL для указанного домена и пути. Если они не указаны, используются домен и путь запрошенной страницы.

cookie (HTTP и/или PHP)

Cookies являются частью Коды состояния HTTP. Методы и структура протокола HTTP- заголовка, поэтому setcookie() должна вызываться до любого вывода данных в браузер. Это то же самое ограничение, которое имеет функция header(). Вы можете использовать функции буферизации вывода, чтобы задержать вывод результатов работы скрипта до того момента, когда будет известно, понадобится ли установка cookies или других заголовков.

Любые cookies, отправленные серверу браузером клиента, будут автоматически включены в суперглобальный массив $_COOKIE, если директива variables_order содержит букву "C".

Когда браузер посылает cookie обратно на сервер, то он посылает только значение. Невозможно получить доступ к домену, пути, времени истечения срока действия или статусу безопасности cookie через массив $_COOKIE, поскольку броузер не посылает его серверу.
Для назначения нескольких значений одной cookie, добавьте [] к её имени. Например:
setcookie("MyCookie[]", "Test", time()+3600);
Для установки и чтения сложных cookie удобно использовать функции serialize и unserialize.
При успешном завершении функция setcookie() возвращает TRUE. Однако, это не означает, что клиентское приложение (например, браузер) правильно приняло и обработало cookie. То есть по поведению функции setcookie НЕльзя определить включены ли куки в браузере клиента.

Непонятные Cookies: _utma, _utmb, _utmc, and _utmz

Иногда, при проверке установленных Cookies можно увидеть переменные с непонятными названиями : _utma, _utmb, _utmc. Эти куки устанавливает Google Analytics. Краткое знакомство с переменными Cookies от Google Analytics

Более подробную информацию о переменных можно узнать в документации Google Analytics.