Инструменты пользователя

Инструменты сайта


cookie

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

cookie [2015/11/10 13:04] (текущий)
Строка 1: Строка 1:
 +====== Cookie ======
  
 +  * [[wordpress#​wordpress_ispolzovanie_cookie|WordPress. Использование Cookie]]
 +
 +**Cookie** (печенье) - это небольшой объем именованных данных(в текстовом виде), сохраняемых браузером и связанных с определенной WEB- страницей или WEB- сайтом. Cookies играют роль памяти веб браузера,​ чтобы сценарии и программы на стороне сервера могли на одной странице работать с данными,​ введенными на другой странице,​ или чтобы браузер мог вспомнить пользовательские параметры или другие переменные состояния,​ когда возвращается на страницу,​ посещенную им ранее. Cookies первоначально предназначались для разработки серверных сценариев и на низшем уровне реализованы как расширение протокола [[HTTP]]. Данные cookie автоматически передаются между веб броузером и веб сервером,​ так что серверные сценарии могут читать и записывать значения cookie, сохраняемые на стороне клиента.
 +
 +Cookie описаны в [[RFC]] 2965. Cookie файлы рассчитаны на то, чтобы изредка сохранять небольшие объемы данных. Они не являются универсальным средством взаимодействия или механизмом передачи данных,​ поэтому следует проявлять умеренность при их использовании. Спецификации RFC 2965 рекомендуют производителям браузеров не ограничивать число и размеры сохраняемых cookie файлов. Однако ограничения **могут** существовать:​
 +  * Всего куков может быть не более 300 штук (300 пар имя-значение). При превышении лимита самые старые файлы перезаписываются.
 +  * Размер одной куки не может превышать 4кб. При превышении самые старые байты перезаписываются.
 +  * От одного домена (второго уровня,​ включая поддомены) может быть установлено не более 20 куков.
 +  * Для конкретного сайта будут доступны только те куки, которые им и были установлены.
 +
 +===== Атрибуты cookie =====
 +
 +  * **Атрибуты cookie:** expire, max age, path, domain и secure.
 +
 +Помимо обязательного имени(name) и значения(value) каждый cookie имеет несколько необязательных атрибута,​ управляющих временем его жизни, видимостью и безопасностью. ​
 +  * **expire** - по умолчанию cookies являются временными(сеансовыми) – их значения сохраняются на период сеанса Веб- браузера и теряются при закрытии сеанса пользователем. Чтобы cookie сохранялся после окончания сеанса,​ необходимо сообщить браузеру,​ как долго он должен храниться. Изначально для этого использовался атрибут expire, указывающий дату окончания действия cookie. Значение expire ([[http://​tools.ietf.org/​html/​rfc2616#​section-3.3.1|RFC 2616]]) записывается в формате "Wdy, DD Mon YYYY HH:MM:SS GMT". Если этот атрибут не задан, то cookie хранится в течение одного сеанса,​ до закрытия браузера. ​
 +  * **max age** - аналогичен атрибуту expires, но срок хранения определяется в секундах ([[RFC]] 6265). Значение десятичное не - отрицательное целое число. По истечении заданного времени клиент должен отказаться от куки. Значение ноль означает,​ что от cookie нужно отказаться немедленно.
 +
 +Установка значения любого из этих атрибутов(expires,​ max age) заставляет браузер сохранить cookie в локальном файле, чтобы он мог быть прочитан при следующем посещении пользователем веб страницы. После того как будет достигнута дата окончания действия expires или истечет период max age, браузер автоматически удалит cookie файл.
 +
 +  * **path** - задает веб страницы,​ с которыми связан cookie. По умолчанию cookie связывается с создавшей его веб страницей и доступен этой же странице,​ а также любой другой странице из того же каталога или любых его подкаталогов. Если, например,​ веб страница http://​www.example.com/​catalog/​index.html создает cookie, то этот cookie будет также видим страницам http://​www.example.com/​catalog/​order.html и http://​www.example.com/​catalog/​widgets/​index.html,​ но не видим странице http://​www.example.com/​about.html. Этого правила видимости,​ принятого по умолчанию,​ обычно вполне достаточно. Тем не менее иногда значения cookie файла требуется использовать на всем многостраничном веб сайте независимо от того, какая страница создала cookie. Чтобы это можно было сделать,​ для cookie файла задается значение path(path=/;​). Тогда любая страница того же веб сервера,​ содержащая указанное значение в своем URL, сможет использовать cookie файл.
 +  * **domain** - по умолчанию cookies доступны только страницам,​ загружаемым с того веб сервера,​ который их установил. Однако большим веб сайтам может потребоваться возможность совместного использования cookies несколькими веб серверами. Если атрибут domain для cookie не установлен,​ значением по умолчанию будет имя веб сервера,​ на котором находится страница. Обратите внимание,​ что нельзя сделать так, чтобы домен cookie файла отличался от домена вашего сервера.
 +  * **secure** - это логический атрибут с именем secure, определяющий,​ как значения cookie файла передаются по сети. По умолчанию cookie не защищен,​ т. е. передается по обычному незащищенному HTTP соединению. Однако если cookie помечен как защищенный,​ он передается,​ **только когда обмен между броузером и сервером организован по протоколу [[HTTPS]]** или другому защищенному протоколу. По умолчанию принимает значение false.
 +
 +<​note>​Cookie определяются тройкой параметров имя-домен-путь (name-domain-path). Т.е cookie- файлы с разными путями или доменами являются разными cookie, даже если имеют одинаковые имена. Соответственно,​ cookie меняется на новое, только если новое cookie имеет те же имя, путь и домен. В остальных случаях новые значения cookie добавляются к старым.</​note>​
 +====== Приватность,​ сторонние cookie. Рекомендации. ======
 +Хотя cookies отправляются только на серверы домена,​ для которого они предназначены,​ веб- страница может подгружать изображения или другие компоненты из других доменов. Cookies, получаемые во время загрузки этих компонентов из других доменов,​ называются "​сторонними"​.
 +
 +Рекламные компании используют сторонние куки для отслеживания перемещений пользователя по сайтам. В частности,​ рекламная компания может отслеживать пользователей на всех сайтах,​ где установлены их рекламные [[баннер|баннеры]]. Знание страниц,​ посещённых пользователем,​ позволяет менять направленность рекламы в зависимости от предпочтений пользователя.
 +
 +Создание профиля пользователей рассматривается как потенциальная угроза приватности даже при отслеживании в рамках одного домена,​ но особенно это актуально при отслеживания на нескольких доменах с использованием сторонних куки. По этой причине в некоторых странах cookies регулируются законодательством.
 +
 +**Спецификация [[wpru>​P3P]]** включает возможность для веб-сервера сообщить браузеру о нарушении конфиденциальности,​ указывая характер собираемой информации и цели сбора. Сюда входит и использование информации,​ полученной с помощью куки. По спецификации P3P браузер может принимать или отклонять куки согласно пользовательским настройкам или же спросить пользователя.
 +
 +**Рекомендации по созданию cookies- файлов**.
 +
 +Пользователь при помощи [[JavaScript]] может изменить cookies- файлы. Более того, существует возможность заменить сессионные куки постоянными. Серверное программное обеспечение должно отслеживать такие попытки. Для этого сервер выдаёт куки на определённый срок и записывает дату окончания куки у себя каждый раз, когда пользователь обращается к серверу. Если куки, присланный браузером,​ имеет дату действия отличную от той, что хранится на сервере,​ значит имеет место попытка подмены даты действия куки. Сервер может отреагировать,​ например,​ запросив у пользователя повторную авторизацию. Или изначально установить флаг **HttpOnly** в заголовке [[HTTP]] Set-Cookie, который делает cookies недоступными для скриптов со стороны клиента.
 +
 +На сервере обычно хранят время последней активности пользователя. И время действия куки зависит от типа ресурса,​ например на форумах от 3 дней, до месяца,​ на админских панелях 1 день.
 +
 +При начале новой сессии ID (уникальную строку) в файле куки нужно менять каждый раз. Это нужно для безопасности,​ чтобы другой человек похитив эту ID- строку не мог пользоваться аккаунтом жертвы постоянно. Также строку нужно менять при каждом вводе пользователем логина и пароля.
 +
 +
 +====== cookie (HTTP и/или JavaScript) ======
 +  * [[http://​mr-ozio.ru/​361|Функции для работы с Cookie на javascript]]
 +  * [[http://​clone.h16.ru/​css-js/​3/​|Примеры работы с Cookie. JavaScript]]
 +Cookies могут быть установлены в браузер (или иной другой программе) двумя способами:​
 +  - [[JavaScript]] работает с cookie с помощью свойства cookie [[Object Document|объекта Document]]. Проверить включены ли cookies можно через [[Object Navigator]].
 +  - при помощи протокола [[HTTP]] в котором предусмотрены два параметра (заголовка) [[http?&#​zagolovki_parametry_http_zaprosa_otveta_suschnosti|Set-Cookie]](сервер указывает принять куку) и Cookie(ответ браузера). Кроме пары имя/​значение(name=newvalue),​ куки может содержать срок действия,​ путь и доменное имя. Эти атрибуты должны идти после пары name=newvalue и разделяться точкой с запятой. Например:​
 +<​file>​
 +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
 +</​file>​Домен и путь говорят браузеру,​ что cookie должна быть отправлена обратно на сервер при запросах [[URL]] для указанного домена и пути. Если они не указаны,​ используются домен и путь запрошенной страницы. ​
 +
 +====== cookie (HTTP и/или PHP) ======
 +  * [[http://​php.net/​manual/​ru/​features.cookies.php|PHP Cookies - Manual]]
 +  * [[http://​howto.memcrab.com/​2012/​01/​php-cookies-cookies-cookies-arrays.html|Детальное описание PHP Cookies, примеры использования и массивы на базе cookies (cookies arrays)]]
 +  * **setcookie** - значение cookie перед отправкой клиенту подвергается URL- кодированию. При обратном получении значение cookie декодируется и помещается в переменную,​ с тем же именем,​ что и имя cookie. Если вы не хотите,​ чтобы значения кодировались,​ используйте функцию setrawcookie()
 +  * **setrawcookie** — посылает cookie не преобразовывая значение,​ в остальном полностью аналогична функции setcookie
 +
 +Cookies являются частью [[HTTP]]- заголовка,​ поэтому setcookie() должна вызываться до любого вывода данных в браузер. Это то же самое ограничение,​ которое имеет функция **header()**. Вы можете использовать функции буферизации вывода,​ чтобы задержать вывод результатов работы скрипта до того момента,​ когда будет известно,​ понадобится ли установка cookies или других заголовков.
 +
 +Любые cookies, отправленные серверу браузером клиента,​ будут автоматически включены в суперглобальный массив $_COOKIE, если директива variables_order содержит букву "​C"​.<​note tip>​Когда браузер посылает cookie обратно на сервер,​ то он посылает только значение. Невозможно получить доступ к домену,​ пути, времени истечения срока действия или статусу безопасности cookie через массив $_COOKIE, поскольку броузер не посылает его серверу.</​note>​
 +
 +  * **Установка.** Простая установка<​file>​
 +SetCookie("​Name","​Value"​)
 +</​file>​Массивы cookies.<​file>​
 +setcookie("​mycookie1['​id'​]",​ "​value_id"​);​
 +setcookie("​mycookie1['​lang'​]",​ "​value_lang"​);​
 +</​file>​Значение cookie не доступно в массиве $_COOKIE в пределах того самого запроса,​ в котором cookie установлен. Другими словами,​ функция setcookie() не изменяет значения массива $_COOKIE. Однако при всех последующих запросах каждый установленный ранее cookie помещается в массив $_COOKIE.
 +<​note>​Для назначения нескольких значений одной cookie, добавьте [] к её имени. Например:<​file>​
 +setcookie("​MyCookie[]",​ "​Test",​ time()+3600);​
 +</​file></​note><​note tip>​Для установки и чтения сложных cookie удобно использовать функции [[http://​ua2.php.net/​manual/​ru/​function.serialize.php|serialize]] и unserialize.</​note><​note important>​При успешном завершении функция setcookie() возвращает TRUE. Однако,​ это не означает,​ что клиентское приложение (например,​ браузер) правильно приняло и обработало cookie. То есть по поведению функции setcookie НЕльзя определить включены ли куки в браузере клиента.</​note>​
 +  * **Чтение**.<​file>​
 +if (isset($_COOKIE['​lang'​])) {
 +print "​Кука"​.$_COOKIE['​lang'​]."​ существует.";​
 +}
 +</​file>​Чтобы вывести на печать имена и значения всех cookies, посланных в текущем запросе,​ выполните цикл по массиву $_COOKIE:<​file>​
 +foreach ($_COOKIE as $cookie_name => $cookie_value) {
 +print "​$cookie_name = $cookie_value<​br>";​
 +}
 +</​file>​
 +
 +  * **Изменение**. Если cookie принимает новое значение при имеющемся уже в браузере cookie с совпадающими параметрами name, domain и path, то старое значение заменяется новым. В остальных случаях новые значения cookie добавляются к старым.
 +  * **Удаление**. Нужно указать только имя куки, например SetCookie("​Name"​). Это приведет к удалению установленной куки с именем "​Name"​ - это официальная рекомендация по удалению куки.
 +  * **Работающий пример удаления и установки куки при помощи PHP**:<​file>​
 +<?php
 +
 +header("​Content-Type:​ text/html; charset=utf-8"​);​
 +if ($_COOKIE['​my_cook'​]) {
 +    // 1 -ый вариант удаления куки
 +    setcookie('​my_cook',​ 'My name is John', time() - 1);
 +    // time() - 1 - время жизни куки закончилось одну секунду назад
 +    // 2 -ый вариант удаления куки, больше отвечающий рекомендациям
 +//    setcookie('​my_cook',​ ''​);​
 +    echo '​Cookie удалена у пользователя'​ . '<​br>';​
 +} else {
 +    setcookie('​my_cook',​ 'My name is John', time() + 60 * 60 * 24);
 +    echo '​Cookie установлена пользователю.'​ . '<​br>';​
 +}
 +var_dump($_COOKIE);​
 +?>
 +</​file>​
 +
 +====== Ссылки ======
 +  * [[http://​www.levik.info/​unknown-cookies-_utma-_utmb-_utmc-and-_utmz.htm|Непонятные Cookies: _utma, _utmb, _utmc, and _utmz]]
 +  * [[http://​ru.wikipedia.org/​wiki/​HTTP_cookie#​.D0.A0.D0.B0.D0.B1.D0.BE.D1.82.D0.B0_.D0.BA.D1.83.D0.BA.D0.B8|Работа куки]]
 +  * [[Сессии]] - управление механизмом сессий в PHP.
загрузка...
cookie.txt · Последние изменения: 2015/11/10 13:04 (внешнее изменение)