- •Работа куки [править]Установка куки
- •[Править]Условия истечения срока хранения
- •[Править]Аутентификация
- •[Править]Приватность и сторонние куки
- •[Править]Недостатки куки
- •[Править]Неточная идентификация
- •[Править]Кража куки
- •[Править]Подмена куки
- •[Править]Межсайтовые куки
- •[Править]Срок действия куки
Назначение cookies
Cookies - это текстовая информация небольшого объема, которая сохраняется на компьютере пользователя по запросу WEB сервера и предается ему при повторных посещениях. Основным назначением cookies является:
Существуют три способа создания cookie:
При помощи поля в заголовке HTTP ответа. В этом случае сервер передает в HTTP ответе одно или несколько полей Set-Cookie: <определение cookies> . Пример заголовка HTTP ответа сервера:
HTTP/1.0 200 OK
Date: Thu, 22 Dec 2005 06:41:30 GMT
Expires: Thu, 01 Jan 1970 00:00:01 GMT
Content-type: image/gif
Set-Cookie: ruid=AjkABppKqkPzAAAAAZEAnFyrv; path=/; domain=.rambler.ru; expires=Sun, 20-Dec-15 06:41:30 GMT
При помощи META тега в заголовке HTML страницы. Тег имеет вид <META HTTP-EQUIV="Set-Cookie" CONTENT=" определение cookies", Данный тег эквивалентен полю Set-Cookie в заголовке HTTP ответа;
При помощи скриптов HTML страницы. В JavaScript, для доступа к cookie предусмотрено свойство document.cookie. Рассмотрим простейший скрипт, который выводит на странице текущее значение document.cookie, а затем создает cookie с именем «test-cookie-1»
<html>
<head>
<SCRIPT LANGUAGE="JavaScript">
document.write("Cookie text = '" + document.cookie+"'");
document.cookie = "data=test-cookie-1-data; expires=Thursday, 14-Feb-2007 18:49:21 GMT";
</script>
</head>
<body>
</body>
</html>
Первый запуск примера должен отобразить пустую строку, второй и последующие – строку «data=test-cookie-1-data». Файл с данным примером прилагается к статье, имя файла - cookie-1.htm. Пример еще пригодится для тестирования анализатора cookies, речь о котором пойдет далее.
Работа куки [править]Установка куки
Запрашивая страницу, браузер отправляет веб-серверу короткий текст с HTTP-запросом. Например, для доступа к странице http://www.example.org/index.html, браузер отправляет на сервер www.example.org следующий запрос:
|
GET /index.html HTTP/1.1 Host: www.example.org |
|
браузер |
→ |
сервер |
Сервер отвечает, отправляя запрашиваемую страницу вместе с текстом, содержащим HTTP-ответ. Там может содержаться указание браузеру сохранить куки:
|
HTTP/1.1 200 OK Content-type: text/html Set-Cookie: name=value (содержимое страницы) |
|
браузер |
← |
сервер |
Строка Set-cookie отправляется лишь тогда, когда сервер желает, чтобы браузер сохранил куки. В этом случае, если куки поддерживаются браузером и их приём включён, браузер запоминает строку name=value (имя = значение) и отправляет её обратно серверу с каждым последующим запросом. Например, при запросе следующей страницы http://www.example.org/spec.html браузер пошлёт серверу www.example.org следующий запрос:
|
GET /spec.html HTTP/1.1 Host: www.example.org Cookie: name=value Accept: */* |
|
браузер |
→ |
сервер |
Этот запрос отличается от первого запроса тем, что содержит строку, которую сервер отправил браузеру ранее. Таким образом, сервер узна́ет, что этот запрос связан с предыдущим. Сервер отвечает, отправляя запрашиваемую страницу и, возможно, добавив новые куки.
Значение куки может быть изменено сервером путём отправления новых строк Set-Cookie: name=newvalue. После этого браузер заменяет старое куки с тем же name на новую строку.
Строка Set-Cookie, как правило, добавляется к HTTP-ответу не самим HTTP-сервером, а CGI-программой, работающей вместе с ним. HTTP-сервер только отправляет браузеру результат работы такой программы.
Куки также могут устанавливаться программами на языках типа JavaScript, встроенными в текст страниц, или аналогичными скриптами, работающими в браузере. В JavaScript для этого используется объект document.cookie. Например, document.cookie = "temperature=20" создаст куки под именем «temperature» и значением 20.[17]
Атрибуты куки
NAME=VALUE - строка символов, исключая перевод строки, запятые и пробелы. NAME-имя cookie, VALUE - значение. Не допускается использование двоеточия, запятой и пробела.
expires=DATE - время хранения cookie, т.е. вместо DATE должна стоять дата в формате "expires=Monday, DD-Mon-YYYY HH:MM:SS GMT", после которой истекает время хранения cookie. Если этот атрибут не указан, то cookie хранится в течение одного сеанса, до закрытия броузера.
domain=DOMAIN_NAME - домен, для которого значение cookie действительно. Например, "domain=cit-forum.com". В этом случае значение cookie будет действительно и для домена cit-forum.com, и для www.cit-forum.com. Если этот атрибут опущен, то по умолчанию используется доменное имя сервера, на котором было задано значение cookie.
path=PATH - этот атрибут устанавливает подмножество документов, для которых действительно значение cookie. Например, указание "path=/win" приведет к тому, что значение cookie будет действительно для множества документов в директории /win/, в директории /wings/ и файлов в текущей директории с именами типа wind.html и windows.shtml. Для того, чтобы cookie отсылались при каждом запросе к серверу, необходимо указать корневой каталог сервера, например, "path=/".
Если этот атрибут не указан, то значение cookie распространяется только на документы в той же директории, что и документ, в котором было установлено значение cookie.
secure - если стоит этот маркер, то информация cookie пересылается только через HTTPS (HTTP с использованием SSL - Secure Socket Level), в защищенном режиме. Если этот маркер не указан, то информация пересылается обычным способом.
Образец HTTP-ответа google.com, содержащего куки с атрибутами.