Что такое cookies и как с ними работать
Содержание:
Общее
Cookie решает одну из проблем http протокола. Проблема заключается в том, что соединение между сервером и клиентом непостоянное, и при передаче информации по HTTP создается отдельный запрос. Реализуя куки, можно эмулировать сессию через http. Cookie — текстовая информация, которую сервер отправляет браузеру. Браузер хранит эти данные и передает их серверу с каждым запросом HTTP как часть заголовка. Cookie имеют время жизни по истечению которого куки является недействительным или оно удаляется.
Что можно делать с помощью cookie
На основании наличия или отсутствия куки сервер анализирует пользователя. К примеру это применяется для аутентификации пользователей. Также куки используют для настройки личного профиля на каком-либо веб-сайте. И самым значительным сегментом на сегодня применения является реклама по интересам. Куки используют для таргетинга рекламы, отслеживают интересы пользователей и предоставляют тематическую рекламу.
Синтаксис и формат cookie
Полное описание поля Set-Cookie HTTP заголовка:
- Set-Cookie: NAVE=VALUE; expires=DATE; path=PATH; domain=DOMAIN_NAME; secure
Минимальное описание поля Set-Cookie HTTP заголовка:
- Set-Cookie: NAME=VALUE;
NAME=VALUE — строчка символов, исключая знаки препринания и переноса и пробелы. Name — имя куки, Value — значение.
expires=DATE — домен, для которого значение куки действительно. К примеру: ‘domain=infoprotect.net’. Если атрибут не указан, то используется доменное имя сервера по умолчанию, на котором было реализовано значение куки.
path=PATH — атрибут указывает подмножество документов, для которых будет действителен данный куки. К примеру: ‘path=/media’, указывает на то, что куки работает в директории media. Чтобы куки отсылался при каждом запросе к серверу, нужно поставить корневой каталог сервера — ‘path=/’.
Если атрибут не указан, то куки действителен для тех документов, на которых он был создан.
secure — маркер указывающий на пересылку куки только через HTTPS.
Синтаксис HTTP заголовка для поля Cookie
При запросе клиентом данных с HTTP сервера, браузер проверяет свои куки на предмет наличия данных к этому домену сервера. Если данные есть, то браузер посылает их к серверу в виде пары:
- Cookie: NAME1=STRING1; NAME2=STRING2;..
Браузер может обновлять атрибуты куки по запросу сервера. Браузер (клиент) имеет ограничения для куки:
- можно хранить до 300 значений куки
- каждый cookie не должен превышать 4 Кбайт
- один сервер/домен не записывает больше 20 значение куки
Если лимит превышается, то удаляются записи первые по времени записи. Поле Set-cookie HTTP заголовка никогда не кэшируется.
Методы задания значение cookie
Метод записи значения cookie зависит от того, как эти значения будут использоваться и какие серверные ресурсы имеются. Можно задать через:
- Мета-теги HTML
- JavaScript
- CGI-скрипты
Главное не забывать об ограничениях по объему и количеству.
Для этого нужно разместить тег META в контейнере <head> </head>
- <META HTTP-EQUIV=»Set-Cookie» CONTENT=»NAME=value; EXPIRES=date; DOMAIN=domain_name; PATH=path; SECURE»>
С помощью php работа с куки одно удовольствие.
Задания cookie с помощью JS
Главным недостатком такого метода является то, что не все браузеры могут разрешать работу js.
Функция установки значения куки
/ name - имя cookie // value - значение cookie // [expires] - дата окончания действия cookie (по умолчанию - до конца сессии) // [path] - путь, для которого cookie действительно (по умолчанию - документ, в котором значение было установлено) // [domain] - домен, для которого cookie действительно (по умолчанию - домен, в котором значение было установлено) // [secure] - логическое значение, показывающее требуется ли защищенная передача значения cookie function setCookie(name, value, expires, path, domain, secure) { var curCookie = name + "=" + escape(value) + ((expires) ? "; expires=" + expires.toGMTString() : "") + ((path) ? "; path=" + path : "") + ((domain) ? "; domain=" + domain : "") + ((secure) ? "; secure" : "") if (!caution || (name + "=" + escape(value)).length <= 4000) document.cookie = curCookie else if (confirm("Cookie превышает 4KB и будет вырезан !")) document.cookie = curCookie }
Функция чтения значения куки
// name - имя считываемого cookie function getCookie(name) { var prefix = name + "=" var cookieStartIndex = document.cookie.indexOf(prefix) if (cookieStartIndex == -1) return null var cookieEndIndex = document.cookie.indexOf(";", cookieStartIndex + prefix.length) if (cookieEndIndex == -1) cookieEndIndex = document.cookie.length return unescape(document.cookie.substring(cookieStartIndex + prefix.length, cookieEndIndex)) }
Функция удаления значений куки
// name - имя cookie // [path] - путь, для которого cookie действительно // [domain] - домен, для которого cookie действительно function deleteCookie(name, path, domain) { if (getCookie(name)) { document.cookie = name + "=" + ((path) ? "; path=" + path : "") + ((domain) ? "; domain=" + domain : "") + "; expires=Thu, 01-Jan-70 00:00:01 GMT" }
Задания cookie с помощью CGI
Самый гибкий и сильный метод управления и работы с куки.
Задание значение cookie на языке Perl:
- print «Content-type: text/html\n»;
- print «Set-Cookie: username=aaa13; expires=Friday, 31-Dec-99 23:59:59 GMT; path=/; domain=www.citforum.ru;\n\n»;
Итог
На сегодня cookie является сильным средством для сбора статистики в рекламных целях. Также с помощью куки можно отслеживать перемещения пользователя и его интересы. Если вы хотите позаботится о своей анонимности в сети, можете воспользоваться рядом статей на тему Защита персональных данных в сети Интернет.