Что такое cookies и как с ними работать. Что такое cookie и как почистить куки в современных браузерах Задание cookie с помощью META-тагов
Cookies - верная технология, позволяющая веб-сайту "запомнить" пользователя,
сохранить его настройки и не спрашивать каждый раз его логин и пароль. Можно
подумать, что если удалить кукисы в браузере, то сайт тебя не узнает. Но эта
уверенность обманчива.
Можно сколько угодно заморачиваться о своей анонимности, использовать прокси
и VPN, подделывать заголовки HTTP-запросов, выдающие используемую систему,
версию браузера, часовой пояс и море другой инфы, но у веб-сайта все равно
останутся способы распознать факт того, что ты на нем уже бывал. Во многих
случаях это не особо критично, но только не в ситуации, когда на каком-то
сервисе необходимо представиться другим пользователем или банально сохранить
анонимность. Легко представить, как среагирует антифрод-система некой условной
финансовой организации, если определит, что с одного компьютера были выполнены
авторизации под аккаунтами совершенно разных людей. Да и разве приятно
осознавать, что кто-то в Сети может отслеживать твои перемещения? Едва ли. Но
обо всем по порядку.
Чтобы идентифицировать пользователя, испокон веков использовались кукисы.
Cookies (от англ. "печенье") - это небольшая порция текстовой информации,
которую сервер передает браузеру. Когда пользователь обращается к серверу
(набирает его адрес в строке браузера), сервер может считывать информацию,
содержащуюся в cookies, и на основании ее анализа совершать какие-либо действия.
Например, в случае авторизованного доступа к чему-либо через веб в cookies
сохраняются логин и пароль в течение сессии, что позволяет пользователю не
вводить их снова при запросах каждого документа, защищенного паролем. Таким
образом, веб-сайт может "запомнить" пользователя. Технически это выглядит
следующим образом. Запрашивая страницу, браузер отправляет веб-серверу короткий
текст с 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 (имя =
значение) и отправляет ее обратно серверу с каждым последующим запросом:
GET /spec.html HTTP/1.1
Host: www.example.org
Cookie: name=value
Accept: */*
Все очень просто. Если сервер получил от клиента куки и они есть у него в
базе, он однозначно может их обработать. Таким образом, если это были кукисы с
некоторой информацией об авторизации, у пользователя в момент посещения не будет
спрашиваться логин и пароль. По стандарту куки имеют определенный срок жизни
(хоть он и может быть очень большим), после которого умирают. А любые
сохраненные кукисы пользователь без труда может удалить, воспользовавшись
соответствующей опцией, которая есть в любом браузере. Этот факт сильно
расстраивает владельцев многих ресурсов, которые не желают терять связь с
посетителем. Им важно отслеживать его, понимать, что "вот этот человек был у нас
вчера, а еще позавчера и т.д.". Особенно это касается различных анализаторов
трафика, систем для ведения статистики, баннерных сетей и т.п. Вот тут-то и
начинается самое интересное, потому что разработчики используют всякие
ухищрения, о которых многие пользователи даже не подозревают. В ход идут
различные уловки.
Все дело в том, что помимо обычных HTTP "плюшек", к которым все давно
привыкли, сейчас активно используются альтернативные хранилища, где браузер
может записать данные на стороне клиента. Первое, что нужно упомянуть - это
хранилище любимого и ненавистного одновременно Flash (для тех пользователей, у
которых он установлен). Данные хранятся в так называемых LSO (Local Shared
Objects) - схожих с cookies по формату файлах, которые сохраняются локально на
компьютере пользователя. Подход во многом аналогичен обычным "плюшкам" (в этом
случае на компьютере пользователя точно так же сохраняется небольшое количество
текстовых данных), но имеет некоторые преимущества:
- Flash-кукисы являются общими для всех браузеров на компьютере (в отличие
от классической cookie, которая привязана к браузеру). Настройки, информация
о сессии, как и, скажем, некий идентификатор для отслеживания пользователя,
не привязываются к какому-то конкретному браузеру, а становятся общими для
всех. - Flash cookie позволяет сохранять намного больший объем данных (как
правило, 100 Кб), что увеличивает количество настроек пользователя,
доступных для сохранения.
На практике LSO становится очень простой и доступной технологией для трекинга
пользователя. Задумайся: если бы я предлагал тебе удалить все "плюшки" в
системе, ты бы вспомнил о Flash-кукисах? Вероятно, нет. А теперь попробуй взять
любой просмотрщик, например, бесплатный
FlashCookiesView и посмотреть, сколько всего интересного записано в
хранилищах Flash. Тут же вырисовывается и список сайтов, которые очень не хотят
потерять твой след, даже если ты подчистишь кэш браузера (вместе с "плюшками").
Но если об LSO слышали продвинутые пользователи и мало-мальски хорошие
разработчики, то о существовании других техник хранения данных, подчас очень
изощренных (но действенных), многие даже не подозревают. Взять хотя бы новые
хранилища, которые появлялись в
(Session Storage,
Local Storage, Global Storage, Database Storage via SQLite), о которых ты можешь
прочитать в статье " ". Этой проблемой всерьез заморочился польский специалист
по безопасности Samy Kamkar. В результате на свет появилась специальная
JavaScript-библиотека evercookie, которая специально создана для того, чтобы
создавать максимально живучие кукисы в браузере. Кто-то может спросить: "Зачем
это нужно?". Очень просто: для того, чтобы однозначно идентифицировать
посетителя страницы, если он придет вновь. Такие сложно убиваемые кукисы часто
называются Tracking cookies и даже определяются некоторыми антивирусами как
угроза приватности. Evercookie может свести все попытки остаться анонимным к
нулю.
Секрет в том, что evercookie использует сразу все доступные для браузера
хранилища: обычные HTTP-кукисы, LSO, контейнеры HTML5. Кроме того, в ход идет
несколько хитрых приемов, которые с не меньшим успехом позволяют оставить на
компьютере желанную метку. Среди них: генерация особых PNG-изображений,
использование history браузера, хранение данных с помощью тега ETag, контейнер
userData в Internet Explorer - оказывается, что вариантов-то очень много.
В том, насколько это эффективно работает, можно убедиться на сайте
разработчика -
http://samy.pl/evercookie . Если нажать на кнопку "Click to create an
evercookie", в браузере будут созданы кукисы со случайным числом. Попробуй
удалить кукисы везде, где это только возможно. Бьюсь об заклад, сейчас ты
задумался: "Где еще можно удалить кукисы, кроме как в настройках браузера?".
Уверен, что все удалил? Перезагрузи страницу для верности, можешь даже заново
открыть браузер. Вот теперь смело нажимай на кнопку "Click to rediscover cookies".
WTF? Сайту это не помешало откуда-то взять данные - в полях страницы
отобразилось число, которые было сохранено в кукисах. Но мы же их потерли? Как
это получилось? Попробуем разобраться с некоторыми техниками.
Крайне интересным приемом, используемым в Evercookie, является подход
хранения данных в кэшированных PNG-изображениях. Когда evercookie устанавливает
куки, он обращается к скрипту evercookie_png.php со специальной HTTP "плюшкой",
отличной от той, которая используется для хранения стандартной информации о
сессии. Эти специальные кукисы считываются PHP-сценарием, создающим
PNG-изображение, в котором все значения RGB (цветов) выставляются в соответствии
с информацией о сессии. В конечном итоге PNG-файл отправляется браузеру клиента
с пометкой: "файл необходимо кэшировать 20 лет".
Получив эти данные, evercookie удаляет созданные ранее специальные
HTTP-кукисы, затем выполняет тот же самый запрос к тому же PHP-сценарию, но не
предоставляя информации о пользователе. Тот видит, что интересующих его данных
нет, и сгенерировать PNG он не может. Вместо этого браузеру возвращается
поддельный HTTP-ответ "304 Not Modified", что заставляет его вытащить файл из
локального кэша. Изображение из кэша вставляется на страницу с помощью тега
HTML5 Canvas. Как только это происходит, evercookie считывает каждый пиксель
содержимого Canvas, извлекая RGB-значения и, таким образом, восстанавливая
данные изначальных кукисов, которые были сохранены в изображении. Вуаля, все
работает.
Другой прием напрямую использует историю браузера. Как только браузер
устанавливает плюшку, evercookie с помощью алгоритма Base64 кодирует данные,
которые необходимо сохранить. Предположим, что этими данными является строка,
полученная "bcde" после преобразований в Base64. Библиотека последовательно
обращается в фоновом режиме к следующим URL:
google.com/evercookie/cache/b
google.com/evercookie/cache/bc
google.com/evercookie/cache/bcd
google.com/evercookie/cache/bcde
google.com/evercookie/cache/bcde-
Таким образом, эти URL сохраняются в history. Далее в ход идет специальный
прием - CSS History Knocker, который с помощью JS-скрипта и CSS позволяет
проверить, посещал ли пользователь указанный ресурс или нет (подробнее тут -
samy.pl/csshack). Для
проверки плюшек evercookie пробегается по всем возможным символам Base64 на
google.com/evercookie/cache, начиная с символа "a" и двигаясь далее, но только
на один символ. Как только скрипт видит URL-адрес, к которому было обращение, он
начинает перебор следующего символа. Получается своеобразный брутфорс. На деле
этот подбор осуществляется чрезвычайно быстро, потому что никакие запросы к
серверу не выполняются. Поиск в history осуществляется локально в максимально
короткий срок. Библиотека знает, что достигла конца строки, когда URL будет
заканчиваться символом "-". Декодируем Base64 и получаем наши данные. Как
назвать разработчиков браузеров, которые это позволяют?
А что будет, если юзер потрет свои кукисы? Важная фишка самой библиотеки
evercookie в том, что пользователю придется основательно постараться, чтобы
удалить кукисы, оставленные в разных местах - сейчас их 10. Если хотя бы в одном
месте останутся данные куки, то они автоматически восстановятся и во всех других
местах. Например, если пользователь не только удалит свои стандартные кукисы, но
и очистит данные LSO, подчистит HTML5-хранилища, что уже маловероятно, все равно
останутся куки, созданные с помощью кэшированного PNG и web history. При
следующем же посещении сайта с evercookie библиотека не только сможет найти
запрятанную плюшку, но и восстановит их во всех остальных местах, которые
поддерживает браузер клиента. Интересный момент связан с передачей
"плюшек" между браузерами. Если пользователь получает кукисы в одном браузере,
то есть большая вероятность, что они воспроизведутся и в других. Единственное
необходимое для этого условие - сохранение данных в Local Shared Object куке.
Библиотека Evercookie полностью открытая, поэтому ты можешь свободно
пользоваться ей, подгонять под свои нужды. К серверу не предъявляется никаких
серьезных требований. Все что нужно - это доступ к JS-сценарию, в котором
содержится код evercookie. Чтобы использовать Flash-кукисы (Local Shared Object),
в папке со скриптом должен быть файл evercookie.swf, а для работы техник,
основанных на PNG-кэшировании и использовании хранилища ETag, необходим доступ к
PHP-сценариям evercookie_png.php и evercookie_etag.php. Использовать evercookie
можно на любой страничке сайта, подключив следующий скрипт:
var ec = new evercookie();
// устанавливаем cookie "id" со значением "12345"
// синтаксис: ec.set(key, value)
ec.set("id", "12345");
// восстанавливаем кукису с именем "id"
ec.get("id", function(value)
{
alert("Cookie value is " + value)
});
Есть также другой способ получения кукисов, основанный на использовании более
продвинутой callback-функции. Это позволяет извлечь значения кукисов из
различных используемых хранилищ и сравнить их между собой:
function getCookie(best_candidate, all_candidates)
{
alert("The retrieved cookie is: " + best_candidate + "\n" + "You
can see what each storage mechanism returned " + "by looping through the all
candidates object.");
For (var item in all_candidates) document.write("Storage
mechanism " + item + " returned: " + all_candidates + "
");
}
ec.get("id", getCookie);
Библиотека evercookie доступна каждому. Это немного пугает, особенно если
совершенно не представляешь, что можно против нее предпринять.
Проблем с тем, чтобы подчистить куки в браузере и Flash"е, нет. Но попробуй
удали данные везде, где наследила evercookie! Ведь если оставишь куки в одном
месте - скрипт автоматически восстановит значение и во всех остальных
хранилищах. По сути, эта библиотека является хорошей проверкой режима
приватности, который сейчас есть практически у всех браузеров. И вот что я тебе
скажу: из Google Chrome, Opera, Internet Explorer и Safari только последний в
режиме "Private Browsing" полностью блокировал все методы, используемые
evercookie. То есть после закрытия и открытия браузера скрипт не смог
восстановить оставленное им значение. Есть повод задуматься. Тем более что в
ближайшее время разработчик evercookie обещал добавить в библиотеку еще
несколько техник хранения данных, в том числе с помощью технологии Isolated
Storage в Silverlight, а также Java-апплета.
Любой пользователь компьютера если и не знает, что такое куки, то уж точно сталкивался с фактом их существования. Это универсальный идентификатор, по которому сайты узнают пользователя и индивидуализируют для него свою выдачу. Вот почему это такой лакомый кусок для мошенников и бизнесменов.
Куки-файлы: что это?Куки представляют собой малые по размеру файлы, которые закачиваются из интернет-сервера и сохраняются некоторое время на жестком диске пользователя. Механизм образования таких элементов выглядит следующим образом:
Подобная технология является «визитной карточкой» веб-обозревателей (браузеров), хотя многие другие расширения имеют ее на своем вооружении.
Использование cookies значительно облегчает серфинг во Всемирной Паутине, но создает дополнительную угрозу личным данным пользователя.
В этом видео программист Илья Арапов расскажет, что такое cookie-файлы и для чего они применяются в браузерах:
Что такое куки в браузере?Данные элементы в памяти компьютера хранят такую информацию о человеке:
- Имена пользователя и пароли, которые вводятся в формы веб-сайтов;
- Индивидуальные настройки;
- Отслеживание поведения клиента;
- Статистические данные;
- Информацию о конкретной сессии.
Все это многообразие данных записывается на обычный текстовый файл (расширение txt ) и хранится в определенной локации в памяти компьютера. Каждый веб-обозреватель самостоятельно выбирает путь сохранения этих элементов, а также нужно ли их сохранять вообще.
Куки можно условно разделить на постоянные непостоянные:
Подавляющее большинство современных браузеров имеют ограничение на общий размер складируемых в ПК куки-файлов.
Куки применяются в различных компьютерных программах во уже на протяжении двух десятков лет. За такой длительный срок они успели себя зарекомендовать в качестве эффективного инструмента для решения таких задач:
Эта технология, значительно облегчающая жизнь обычного пользователя сети, не лишена ряда недостатков. Среди самых значимых претензий, предъявляемых браузерному «печенью »:
- Просчеты в области безопасности. Информацию, которую сервер пересылает на машину клиента для временного хранения, относительно легко перехватить. В большинстве случаев пользователи не используют для доступа ко Всемирной Паутине зашифрованные соединения, поэтому они становятся легкой добычей мошенников. В случае попадания данных из cookie в руки злоумышленников, последние могут узнать многое о посещениях сайтов и особенностях поведения человека в сети;
- Смысл их существования сводится практически на нет, если параллельно используются несколько обозревателей. Каждый из них хранит свои временные файлы, которые никак между собой не пересекаются;
- Значительная часть пользователей убеждена, что куки являются программными файлами, которые могут самовольно удалять информацию с накопителя ПК. Некоторые утверждают, что они предназначены исключительно для рекламы или спама. Все эти опасения являются не более чем заблуждениями .
«Дыры» в программном обеспечении позволяют получить доскональную информацию о человеке. Причем получателем таких данных могут выступать как злоумышленники и недобросовестные коммерсанты, так и заботливые государственные органы.
Во избежание слежки и кражи конфиденциальной информации, можно настроить обозреватель так, чтобы:
- Куки никогда не записывались;
- Следящие файлы подлежали автоматическому удалению после закрытия интернет-обозревателя;
- Запретить отправку данных с компьютера на сервера некоторых подозрительных сайтов;
- Установить короткий временной промежуток для хранения следящей информации.
Периодически нужно производить принудительную чистку браузера. Однако чтобы удалить содержимое папок, нужно знать, где они находятся. В помощь начинающим пользователям были разработаны специальные программы (например, CCleaner), которые производят анализ и удаление cookie по нажатию одной кнопки.
С целью облегчения интернет-серфинга компьютер сохраняет не только метрические и статистические данные. Обозреватель выгружает из сети такую информацию из последних посещенных страниц:
Вся совокупность перечисленных выше данных призвана ускорить загрузку ресурсов и упростить взаимодействие с сетевым пространством. Так, загрузка видео в кэш очень удобна тем, у кого имеются проблемы с интернет-подключением.
Однако подгрузка не из веба, а с ПК может привести к тому, что «картинка» на экране будет неактуальной. Кроме того, папка с кешем занимает немало места, поскольку все ее содержимое представляет собой медиафайлы.
Итак, в данной статье мы рассказали, что такое куки. Благодаря им можно только один раз заполнить форму пароля на сайте и не вспоминать его при каждом входе. Именно благодаря им юзер видит только те рекламные объявления, которые нужны именно ему. Но за такую простоту приходится платить своей безопасностью и сохранностью персональных данных.
В данном ролике мастер Антон Прохоров расскажет, как можно почистить кэш и куки в браузере Google Chrome:
Cookie (куки, печенье) - это небольшой объем именованных данных(в текстовом виде), сохраняемых браузером и связанных с определенной WEB- страницей или WEB- сайтом. Cookies играют роль памяти веб браузера, чтобы сценарии и программы на стороне сервера могли на одной странице работать с данными, введенными на другой странице, или чтобы браузер мог вспомнить пользовательские параметры или другие переменные состояния, когда возвращается на страницу, посещенную им ранее. Cookies первоначально предназначались для разработки серверных сценариев и на низшем уровне реализованы как расширение протокола . Данные cookie автоматически передаются между веб броузером и веб сервером, так что серверные сценарии могут читать и записывать значения cookie, сохраняемые на стороне клиента.
Cookie описаны в RFC 2965. Cookie файлы рассчитаны на то, чтобы изредка сохранять небольшие объемы данных. Они не являются универсальным средством взаимодействия или механизмом передачи данных, поэтому следует проявлять умеренность при их использовании. Спецификации RFC 2965 рекомендуют производителям браузеров не ограничивать число и размеры сохраняемых cookie файлов. Однако ограничения могут существовать:
Всего куков может быть не более 300 штук (300 пар имя-значение). При превышении лимита самые старые файлы перезаписываются.
Размер одной куки не может превышать 4кб. При превышении самые старые байты перезаписываются.
От одного домена (второго уровня, включая поддомены) может быть установлено не более 20 куков.
Для конкретного сайта будут доступны только те куки, которые им и были установлены.
Атрибуты cookie: expire, max age, path, domain и secure.
Помимо обязательного имени(name) и значения(value) каждый cookie имеет несколько необязательных атрибута, управляющих временем его жизни, видимостью и безопасностью.
expire - по умолчанию cookies являются временными(сеансовыми) – их значения сохраняются на период сеанса Веб- браузера и теряются при закрытии сеанса пользователем. Чтобы cookie сохранялся после окончания сеанса, необходимо сообщить браузеру, как долго он должен храниться. Изначально для этого использовался атрибут expire, указывающий дату окончания действия cookie. Значение expire (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.
Cookie определяются тройкой параметров имя-домен-путь (name-domain-path). Т.е cookie- файлы с разными путями или доменами являются разными cookie, даже если имеют одинаковые имена. Соответственно, cookie меняется на новое, только если новое cookie имеет те же имя, путь и домен. В остальных случаях новые значения cookie добавляются к старым.
Cookies могут быть установлены в браузер (или иной другой программе) двумя способами:
при помощи протокола Методы и структура протокола 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)setcookie - значение cookie перед отправкой клиенту подвергается URL - кодированию. При обратном получении значение cookie декодируется и помещается в переменную, с тем же именем, что и имя cookie. Если вы не хотите, чтобы значения кодировались, используйте функцию setrawcookie()
setrawcookie - посылает cookie не преобразовывая значение, в остальном полностью аналогична функции setcookie
Cookies являются частью Методы и структура протокола HTTP - заголовка, поэтому setcookie() должна вызываться до любого вывода данных в браузер. Это то же самое ограничение, которое имеет функция header() . Вы можете использовать функции буферизации вывода, чтобы задержать вывод результатов работы скрипта до того момента, когда будет известно, понадобится ли установка cookies или других заголовков.
Любые cookies, отправленные серверу браузером клиента, будут автоматически включены в суперглобальный массив $_COOKIE, если директива variables_order содержит букву "C".
Когда браузер посылает cookie обратно на сервер, то он посылает только значение. Невозможно получить доступ к домену, пути, времени истечения срока действия или статусу безопасности cookie через массив $_COOKIE, поскольку броузер не посылает его серверу.
Установка. Простая установка SetCookie("Name","Value")
Массивы cookies.
Setcookie("mycookie1["id"]", "value_id"); setcookie("mycookie1["lang"]", "value_lang");
Значение cookie не доступно в массиве $_COOKIE в пределах того самого запроса, в котором cookie установлен. Другими словами, функция setcookie() не изменяет значения массива $_COOKIE. Однако при всех последующих запросах каждый установленный ранее cookie помещается в массив $_COOKIE.
Для назначения нескольких значений одной cookie, добавьте к её имени. Например: setcookie("MyCookie", "Test", time()+3600);
При успешном завершении функция setcookie() возвращает TRUE. Однако, это не означает, что клиентское приложение (например, браузер) правильно приняло и обработало cookie. То есть по поведению функции setcookie НЕльзя определить включены ли куки в браузере клиента.
Чтение . if (isset($_COOKIE["lang"])) { print "Кука".$_COOKIE["lang"]." существует."; }
Чтобы вывести на печать имена и значения всех cookies, посланных в текущем запросе, выполните цикл по массиву $_COOKIE:
Foreach ($_COOKIE as $cookie_name => $cookie_value) {
print "$cookie_name = $cookie_value
";
}
Изменение . Если cookie принимает новое значение при имеющемся уже в браузере cookie с совпадающими параметрами name, domain и path, то старое значение заменяется новым. В остальных случаях новые значения cookie добавляются к старым.
Удаление . Нужно указать только имя куки, например SetCookie("Name"). Это приведет к удалению установленной куки с именем "Name" - это официальная рекомендация по удалению куки.
Работающий пример удаления и установки куки при помощи PHP :
Иногда, при проверке установленных Cookies можно увидеть переменные с непонятными названиями: _utma, _utmb, _utmc. Эти куки устанавливает Google Analytics. Краткое знакомство с переменными Cookies от Google Analytics
Utma – выдается при первом посещении сайта.
Utmb – переменная отслеживает время посещения сайта. При каждом заходе на страницу отмечает “переход”. Время жизни по умолчанию 30 минут.
Utmc – отслеживает закрытие браузера пользователем. Если при повторном заходе кука отсутствует, засчитывается новое посещение, независимо от _utmb
Utmv – переменная используется для установки “собственной” пользовательской переменной
Utmx – переменная нужна для Website Optimizer. Время жизни у куки _utmx – 2 года.
Более подробную информацию о переменных можно узнать в документации Google Analytics.
Файлы cookie, как правило, устроены очень просто, но зато живут в системе совершенно самостоятельной жизнью. Несколько лет назад по поводу этой технологии поднялась большая шумиха в прессе, и дискуссии о том, не нарушают ли файлы cookie конфиденциальность пользователей, ведутся до сих пор.
Так или иначе, технология cookie значительно облегчает пользование Интернетом, делает работу с WEB страницами удобнее для пользователей и помогает WEB мастерам собирать более точные сведения о посетителях сайтов.
В апреле 2000 года одна крупная уважаемая газета опубликовала большую аналитическую статью по проблемам конфиденциальности пользовательских данных в Интернете. В этой статье было дано развернутое определение технологии cookie, которое вкратце сводится к следующему: «файлы cookie - это программы, которые WEB сайты размещают на локальном компьютере. Они собирают данные о пользователях и их сетевой активности, а сайты в любой момент могут загрузить с локальной машины всю собранную ими информацию». Так вот, все это совершенно неправильно.
Такие определения в прессе очень распространены, но ни одно из них не имеет ничего общего с действительностью. Файлы cookie - это вовсе не программы. Их нельзя запустить, как приложение, поэтому они не могут самостоятельно собирать какие бы то ни было сведения.
Определение cookieВот настоящее определение технологии cookie: файлы cookie - это фрагменты текста, позволяющие WEB сайтам сохранять на компьютере пользователя определенные сведения для последующего к ним обращения. Данные хранятся в виде пар «имя - значение». К примеру, многие WEB сайты присваивают всем своим посетителям уникальные идентификационные номера и хранят эти номера на компьютерах пользователей в файлах cookie.
Пользователи Microsoft могут собственными глазами полюбоваться на файлы cookie, сохраненные на локальном компьютере в папке «c:windowscookies». Например, на моем жестком диске хранятся 165 файлов cookie, каждый из которых представляет собой простой текстовый файл, содержащий в себе несколько пар «имя - значение», по файлу на каждый посещенный мною WEB сайт.
Все это, как видите, обычные текстовые файлы, а никак не программы. В имени файла упоминается название создавшего его сайта. Те же сведения содержатся и в самом тексте. Открыть файл cookie, как и любой другой, можно двойным щелчком.
Рассмотрим, к примеру, файл cookie для сайта goto.com. В нем содержатся следующие данные:
- UserID A9A3BECE0563982D goto.com
Сайт goto.com сохранил на моем компьютере всего одну пару «имя - значение». Имя в данном случае - «UserID», а значение - «A9A3BECE0563982D». Следовательно, когда я в впервые посетил goto.com, сайт присвоил мне уникальный идентификационный номер и сохранил его на моем компьютере. (Обратите внимание - помимо трех упомянутых значений, в файле могут содержаться и другие: это служебные данные браузера).
Amazon.com хранит на моей машине более подробные сведения:
- session-id-time 954242000 amazon.com/
- session-id 002-4135256-7625846 amazon.com/
- x-main eKQIfwnxuF7qtmX52 x 6VWAXh@Ih6Uo5H amazon.com/
- ubid-main 077-9263437-9645324 amazon.com/
Получается, Amazon сохраняет в файле cookie основной идентификационный номер пользователя, идентификационный номер и время начала каждого сеанса, а также значение «x-main», которое может содержать любые другие данные.
Большинство сайтов хранит на локальном компьютере только идентификационный номер пользователя, но в принципе, количество пар «имя - значение» в файле cookie не ограничено.
Пара «имя - значение» - это просто фрагмент данных. Это не программа, и разумеется, она не может вести в системе никакой самостоятельной деятельности. Веб-сайт получает из файлов cookie только те сведения, которые сам же в них сохранил. Он не может читать файлы cookie других сайтов и тем более, не может загружать с локального компьютера никакие посторонние сведения.
Мне не хочется забивать вам голову техническими подробностями, поэтому я кратко скажу, что такое Cookies и, нет, не с чем их едят, а как с ними нужно работать.
Представим, что перед нами поставлена такая задача: нужно написать индивидуальный счетчик посещения для каждого клиента сайта нашей компании. То есть, чтобы пользователь знал, сколько раз именно он был на нашем сайте, а не видел общее количество посещений.
Можно решить данную задачу двумя способами. Первый способ заключается в том, чтобы вести учет по IP -адресу. Для этого нужна база данных, состоящая всего из одной таблицы, структура которой примерно такова:
Посещения |
|
111. 111.111.111 |
|
Когда пользователь заходит на наш сайт, нам нужно определить его IP , найти в базе данных информацию о его посещениях, увеличить счетчик на единицу и вывести его в браузер. Определять IP-адрес клиента мы уже сумеем (переменная $REMOTE_ADDR), поэтому нам несложно написать такую программу. Однако при использовании данного способа рано или поздно «всплывут» две проблемы:
Для каждого IP -адреса нужно будет вести учет в одной таблице, которая, скорее всего, будет большой, а из этого следует, что мы нерационально используем процессорное время и дисковое пространство. Гораздо правильнее с нашей стороны будет использовать это пространство с большей пользой.
У большинства домашних пользователей IP -адреса динамические. То есть, сегодня у него адрес 111. 111.111.111, завтра -- 111.111.111.118. И попробуй потом определить, кто есть кто. Можно ввести регистрацию с использованием
имени пользователя и пароля, но это еще больше увеличит нашу базу данных и создаст неудобства для клиентов.
Ясное дело, что данный способ нам не поможет. Остается использовать второй способ, который намного легче в реализации. Мы устанавливаем Cookie - переменную, которая будет храниться на диске у пользователя. Эта переменная и будет хранить информацию о посещениях. Она будет считываться сценарием при обращении пользователя к серверу. Выгода очевидна. Во-первых, нам не нужно хранить ненужную информацию о IP -адресах, во-вторых, нам не страшны динамические IP -адреса, поскольку данные о своих посещениях хранятся у клиента.
Теперь нам ясно, для чего используются Cookies - для хранения небольшой по объему информации у клиента, например, его логина (но ни в коем случае не пароля!), настроек сайта (цветовая гамма, язык, и т.д.) и другой информации.
Почему небезопасно хранить пароль в Cookies ? Получив от сервера Cookie - переменную, браузер сохраняет ее на диске в открытом виде, то есть, не кодируя ее. Любой, кому не лень, может просмотреть значения этой переменной. Кроме того в некоторых браузерах Cookies вообще сохраняются в обыкновенном тектовом файле, а некоторые - даже позволяют просмотреть их. Например, в браузере Mozila для просмотра
Сооkies выполните команду меню Edit-Preference-Security-Cookes
В этом разделе ны можете включить (Enable) или отключить (Disable ) прием Cookies, установить максимальный срок хранения Cookie (Limit maximum lifetime) :
Current session (Текущая сессия) - переменная будет удалена по окончании сессии работы с сайтом (например, когда пользователь закроет окно сайта).
Установить определенное количество дней, по истечении которых все принятые Cookies будут удалены.
Нажмите кнопку Manage Stored Cookies . Появится окно с информацией обо всех установленных Cookies
Щелкните на имени установленной Cookie -переменной, чтобы получить информацию о ней:
Name - имя переменной;
Information - информация, которую содержит Cookie;
Host - узел, установивший переменную;
Secure Server - признак того, что Cookie должна передаваться через защищенное (HTTPS ) соединение:
Expires - время жизни Cookie . Значение at end of session означает, что Cookie будет «жить» до конца сессии.
Кнопка Remove Cookie удаляеттекущую переменную, а кнопка Remove All Cookies удаляет iscc Cookie -переменные.
Вы часто покупаете товары в Интернет-магазинах? Тогда рекомендую время от времени (скажем, раз в месяц) удалять все Cookies . Зачем? Вы увидите, что цены станут ниже. Дело в том, что некоторые Интернет-магазины (особенно, «буржуйские») грешат на доверии клиентов. Пару раз они могут продать вам товар по заниженным пенам, затем вы, зная, что это самый дешевый в Интернете магазин, будете покупать товары только у них. А они как раз и воспользуются Cookies - будут сознательно завышать цены на все товары, когда вы в очередной раз будете делать покупку, уверяя себя, что экономите деньги. При этом с помощью Cookies Интернет-магазины будут определять, кто вы такой и что вы раньше покупали.
Однако не нужно совсем отключать Cookies . Некоторые сайты станут загружаться некорректно. Если вы боитесь, что через Cookies можно получить вирус, то не беспокойтесь: даже если кто-то передаст вам с помощью Cookies «вредный код», то система не сможет его запустить, так как Cookies хранятся в текстовом виде (а в Linux для Cookies не устанавливается право за запуск файла).
Перед тем, как начать работу с Cookies , позволю себе пару замечаний относительно выбора браузера. Для отладки ваших сценариев, если они используют Cookies , я рекомендую использовать браузер Mozilla , поскольку он позволяет эффективно управлять Cookies . Если этот браузер вас почему-то не устраивает, используйте Konqueror , который также позволяет просмотреть подробную информацию о полученных Cookies . Браузеры Internet Explorer версий 4 и 5 не позволяют этого сделать.
2 . Программирование Cookies Установка CookiesВот теперь можно приступить к программированию Cookies . Для установки Cookies используется функция SetCookie . В общем случае для этой функции можно указать целых шесть параметров, но обязательный из них является только один - пате:
namе - задает имя (строка), закрепленное за Cookie .
value - определяет значение переменной (строка).
expire - время жизни переменной (целое число). Если этот параметр не указан, Cookie будет «жить» до конца сессии, то есть до закрытия браузера. Если время указано, то, когда оно наступит, Cookie самоуничтожится.
path - путь к Cookie (строка).
domain - домен (строка). В качестве значения устанавливается имя хоста с которого установили.
secure - передача через HTTPS -соединение.
Обычно используются только три первые параметра. В листинге 4 приведены несколько примеров установки Cookies .
Листинг 4. Примеры установки Cookies
/./ До конца сессии
SetCookie("Test","Value");
.// Время жизни - один час после установки
SetCookie("My_cookie", "One hour",time()+3600); ?>
При использовании Cookies нужно иметь в виду, что Cookies должны быть установленными до первого вывода сценария (будь то оператор echo или вывод какойнибудь функции). Поэтому желательно устанавливать Cookies в самом начале сценария. Дело в том, что Cookies устанавливаются с помощью определенного заголовка сервера, а если вы выводите что-нибудь, то это означает, что начинается тело документа. В результате Cookies не будут установлены. Вот что вы получите, если установка Cookies
невозможна: Warning: Cannot add header information - headers already sent by (output started at /var/www/html/cookie.php: 2) in /var/www/ html/cookie.php on line 4
Чтение значений CookiesПолучить доступ к Cookies достаточно просто. Все они хранятся к переменной окружения НТТР_СООК1Е . Если мы установили несколько Cookies , то в переменной НТТР_СООК1Е они будут перечислены через «;» (через точку с запятой). Например: mycookiel=valuel;mycookie2=value2.
Для чтения значения Cookies можно обращаться к ним, как к обыкновенным переменным. Например: echo $Test ; Только не забудьте проверить существование переменной. В заключение приведу пример «индивидуального счетчика» посещений. Код сценария приведен в листинге 5.
Листинг 5. Индивидуальный счетчик с помощью Cookies
// Если переменная не существует, объзляем ее if (! isset(51na Counter); $lnd Counter = 0;
// Увеличиваем счетчик
/* Устанавливаем Cookie которая будет жить до переустановки пользователем Windows, то есть очень долго. Если вам интересно, то браузер удалит ее 18/07 ,-"2 9 08:49 */
SetCookie ("Jnd_ Counter", $ I na_ Counter, Ox6FFFFFFF) ; echo "Вы посетили этот сайт $Ind_Counter раз"
Выше я говорил, что перед установкой Cookies
нельзя использовать оператор echo
. Только что я сам допустил подобную ошибку. Если оператора echo и вашей программе нет (по крайней мере до вызова SetCookie()
), a Cookies
невозможно установить, убедитесь в том, что символы маркера начала программы -