Как использовать cookies на сайте
Введение в Cookies
cookie является решением одной из наследственных проблем http спецификации. Эта проблема заключается в непостоянстве соединения между клиентом и сервером, как при ftp или telnet сессии, т.е. для каждого документа (или файла) при передаче по http протоколу посылается отдельный запрос. Включение cookie в http протокол дало частичное решение этой проблемы.
cookie это небольшая порция информации, которую сервер передает клиенту. Клиент (броузер) будет хранить эту информацию и передавать ее серверу с каждым запросом как часть http заголовка. Некоторые cookie хранятся только в течение одной сессии, они удаляются после закрытия броузера. Другие, установленные на некоторый период времени, записываются в файл. Обычно этот файл называется ‘cookie.txt’.
Что можно делать с помощью cookie?
Сами по себе cookies не могут делать ничего, это только лишь некоторая информация. Однако, сервер может на содержащуюся в cookies информацию. Например, в случае авторизованного доступа к чему либо через www, в cookies сохраняется login и password в течение сессии, что позволяет не вводить их при запросе каждого запаролированного документа. Другой пример: cookies могут использоваться для построения персонализированных страниц. Чаще всего встречается такое — на некотором сервере Вас просят ввести свое имя, и каждый раз, когда Вы заходите на первую страницу этого сервера, Вам пишут что-то типа «hello, your_name!». На использовании cookies также часто строят функцию оформления заказа в онлайновых магазинах, в частности, в Амазоне, такая своеобразная виртуальная корзина покупателя, как в обычном реальном супермаркете.
Какие броузеры поддерживают механизм cookies?
Не все, конечно, однако самые популярные поддерживают. Я точно знаю, что netscape (начиная с самой первой версии), microsoft ie (трешка и четверка — точно, про предыдущие не знаю), mosaic
Установка cookie.
Как выставлять cookies клиенту зависит от того, как они будут использоваться в дальнейшем. Это можно делать как с помощью скриптов,так и с помощью meta-тагов html. Можно манипулировать временем жизни выставленных cookies и устанавливать место, в котором установки действительны. Общий формат установки таков: set-cookie: name=value; expires=date; domain=domain_name; path=path; secure
Установка cookie с помощью html.
Простейший способ выставить cookie — использовать соответствующий meta-таг в заголовке любого статического html документа.
Установка cookie с использованием perl/cgi.
Другой способ выставить cookie — с помощью серверного скрипта. На perl это будет выглядеть примерно следующим образом: перед тем как выдавать серверный ответ генерируется http заголовок
Чтобы прочитать скриптом значение cookie, которое было установлено ранее, и соответствующим образом выполнить скрипт, используется переменная окружения http_cookie. На perl это будет выглядеть так:
При использовании ssi для просмотра значения cookie можно применить директиву:
Установка нескольких cookie одновременно.
Как с помощью html, так и с помощью скриптов можно устанавливать несколько cookie разом:
cookies в php
Рассмотрим простейший пример — установка на компьютере пользователя булки с информацией о том, был он на этой странице или нет. Это делается так:
После этого у вас на диске появляется c cookie с информацией о том, что эту страницу вы уже посещали. Как долго будет действовать cookie? Поскольку мы использовали только два параметра, а другие нужные параметры оставили без внимания, в них установились стандартные значения: действует до закрытия всех окошек браузера, в домене установившего булку скрипта, по незащищенному соединению. А если мы хотим посчитать сколько посещений произошло в течение года? Как установить эти значения? Воспользуемся полным синтаксисом setcookie:
Как видите, мы можем указать не только имя cookie и значение, но также и время действия (expire — в секундах, прошедших с 1970-го года), путь (стандартное значение «/»), домен («домен.установившего.куки.скрипта») и секьюрность (0), т.е. также и область действия cookie.
Существует ограничение по количеству cookie на домен (20 штук), поэтому на самом деле в cookie хранится массив, и мы можем в одной булке хранить имя пользователя и количество его заходов на страницу (просто используйте значение cookie как массив). Рассмотрим скрипт — счетчик посещения страницы пользователем.
Следующим шагом является прибавление к счетчику посещений единички. Логично — пользователь ведь зашел на страницу? Значит, увеличил количество посещений на единичку. Затем (до выдачи каких-либо надписей) мы должны установить cookie c новой информацией, действующий час. Чтобы получить время в секундах от 1970-го года, используется функция time(), к которой мы прибавляем искомое время (3600 секунд). Следует отметить, что время устанавливается в часовом поясе пользователя, так что запросто может оказаться, что время жизни cookie уже истекло. С этим надо бороться!
И только после того, как мы установили cookie мы можем начать что-то показывать пользователю, что мы и делаем, печатая количество посещений им этой страницы.
Внимание! cookies можно устанавливать только до какой бы то ни было выдачи текста! Проследите, чтобы до использования setcookie не было операторов print. Сообщения об ошибках тоже портят нам установку cookie. Вся проблема заключается в том, что информация о cookie относится к области заголовков, а то, что выдает print — нет.
Но мы должны не только уметь добавить cookie, но и удалить… Это делается все той же многострадальной функцией setcookie, только на этот раз мы вызываем ее с одним единственным параметром — именем cookie:
Куки HTTP
Cookie используются, главным образом, для:
⦁ Управления сеансом (логины, корзины для виртуальных покупок)
⦁ Персонализации (пользовательские предпочтения)
⦁ Мониторинга (отслеживания поведения пользователя)
До недавнего времени cookie принято было использовать в качестве хранилища информации на стороне пользователя. Это могло иметь смысл в отсутствии вариантов, но теперь, когда в распоряжении браузеров появились различные API (программные интерфейсы приложения) для хранения данных, это уже не так. Из-за того, что cookie пересылаются с каждым запросом, они могут слишком сильно снижать производительность (особенно в мобильных устройствах). В качестве хранилищ данных на стороне пользователя вместо них можно использовать Web storage API ( localStorage and sessionStorage ) и IndexedDB.
Чтобы посмотреть сохранённые cookies (и какие ещё способы хранения данных использует веб-страница), можно использовать Storage Inspector (Инспектор хранилища) из раздела Developer Tools (Веб-разработка).
Создание cookie
Получив HTTP-запрос, вместе с откликом сервер может отправить заголовок Set-Cookie с ответом. Cookie обычно запоминаются браузером и посылаются в значении заголовка HTTP Cookie (en-US) с каждым новым запросом к одному и тому же серверу. Можно задать срок действия cookie, а также срок его жизни, после которого cookie не будет отправляться. Также можно указать ограничения на путь и домен, то есть указать, в течении какого времени и к какому сайту оно отсылается.
Заголовки Set-Cookie и Cookie
Заголовок Set-Cookie HTTP-отклика используется для отправки cookie с сервера на клиентское приложение (браузер). Простой cookie может задаваться так:
Теперь, с каждым новым запросом к серверу, при помощи заголовка Cookie (en-US) браузер будет возвращать серверу все сохранённые ранее cookies.
Сессионные cookie
Постоянные cookies
Постоянные cookie ( permanent cookies) удаляются не с закрытием клиента, а при наступлении определённой даты (атрибут Expires ) или после определённого интервала времени (атрибут Max-Age ).
Secure («безопасные») и HttpOnly cookies
Область видимости куков
Директивы Domain и Path определяют область видимости куки, то есть те URL-адреса, к которым куки могут отсылаться.
Атрибут Domain указывает хосты, на которые отсылаются куки. Если он не задан, то по умолчанию берётся доменная часть адреса документа (но без поддоменов). Если домен указан явно, то поддомены всегда включены.
Атрибут Path указывает URL, который должен быть в запрашиваемом ресурсе на момент отправки заголовка Cookie. Символ %x2F («/») интерпретируется как разделитель разделов, подразделы также включаются.
Если задано Path=/docs, то подходят и такие пути, как:
Куки SameSite
Куки SameSite позволяют серверам декларировать, что куки не должны отсылаться с межсайтовыми запросами, что в некотором роде обеспечивает защиту от межсайтовых подделок запроса (CSRF). Куки SameSite находятся пока в стадии эксперимента и поддерживаются не всеми браузерами.
Доступ из JavaScript посредством Document.cookie
Учитывайте, пожалуйста, вытекающие из этого проблемы в отношении безопасности, подчёркнутые ниже (раздел Security). Куки, доступные для JavaScript, могут быть похищены посредством XSS.
Безопасность
Важная информация никогда не должна храниться или передаваться в куках HTTP, поскольку этот механизм сам по себе небезопасен.
Захват сессии (session hijacking) и XSS
Атрибут HttpOnly помогает понизить эту угрозу, перекрывая доступ к кукам из JavaScript..
В Wikipedia приведён хороший пример CSRF. В сообщение (например, в чате или на форуме) включают (якобы) изображение, которое, на самом деле, представляет собой запрос к банковскому серверу на снятие денег:
Теперь, если вы зашли в свой банковский аккаунт, а куки по-прежнему действительны (и никакой дополнительной проверки не требуется), то при загрузке HTML-документа с этим изображением деньги будут переведены с вашего счета. Для защиты от этого используется ряд методов:
Отслеживание и частные данные
Сторонние (Third-party) куки
Куки связаны с определённым доменом. Если он совпадает с доменом страницы, на которой вы находитесь, то их называют «куками первого лица» (first-party cookies). Если это другой домен, их называют «сторонними куками» (third-party cookies). Куки первого лица отсылаются только на тот сервер, который их создал. Однако, страница может содержать изображения или другие компоненты (например, рекламные баннеры), хранящиеся на других серверах. Куки, посылаемые через такие компоненты, используются, главным образом, в рекламных целях или для отслеживания информации в сети. В качестве примера можно рассмотреть типы файлов cookie, используемые Google. Большинство браузеров по умолчанию разрешают использование сторонних куков, но есть расширения, позволяющие их блокировать (например, Privacy Badger от EFF).
Если вы не сообщите об использовании сторонних куков, а пользователь обнаружит их самостоятельно, то доверие к вам может пошатнуться. Чтобы избежать этого, лучше предоставлять соответствующую информацию. В некоторых странах использование куков регламентируется законодательством. Прочитать об этом можно, например, в Википедии в разделе cookie statement (создание куков).
Не отслеживать (Do-Not-Track)
Директива Евросоюза о куках
Правила по использованию куков в Евросоюзе (ЕС) определены в Директиве 2009/136/EC Европарламента (Directive 2009/136/EC), вступившей в действие 25 мая 2011. Это не закон, как таковой, а рекомендация странам-членам ЕС принять законы, соответствующие её требованиям. В каждой стране на этот счёт могут быть свои законы.
Согласно этой директиве для хранения или извлечения информации с компьютера пользователя требуется проинформировать его и получить соответствующее разрешение. С момента её появления многие сайты добавили баннеры, информирующие пользователя об использовании куков.
Подробнее об этом можно прочитать в соответствующем разделе Википедии (Wikipedia). За наиболее полной и точной информацией обращайтесь к законодательствам конкретных стран.
Куки-зомби и «вечные» куки
Более радикальный подход к кукам представляют собой куки-зомби, или «вечные» куки, которые восстанавливаются после удаления, и полное удаление которых умышленно затруднено. Они используют прикладные интерфейсы веб-хранилищ (Web storage API), Flash Local Shared Objects и другие методы собственного воссоздания в случае, если обнаружено их отсутствие.
JavaScript и куки (cookie)
JavaScript дает возможность устанавливать и читать куки в браузере. В данном уроке мы рассмотрим как происходит работа с куками, а также сделаем простую страницу, которая будет помнить введеное имя и отображать его при каждом входе.
Что такое куки (cookie)?
Обычно куки используются веб сервером для выполнения таких функций как отслеживание посещений сайта, регистрации на сайте и сохранения сведений о заказах или покупках. Однако нам не нужно придумывать программу для вэб сервера чтобы использовать куки. Мы можем использовать их с помощью JavaScript.
В JavaScript куки доступны с помощью свойства cookie объекта document. Создать куки можно следующим образом:
. и получить весь сохраненый набор куков так:
Давайте рассмотрим сохранение и получение куков более подробно.
Сохранение куки
Для сохранения куки нужно присвоить document.cookie текстовую строку, которая содержит свойства куки, которые мы хотим создать:
Свойства описаны в таблице:
Давайте посмотрим пример установки куки:
Перекодирование значения куки!
Функция для установки куки
Функция получает данные для куки в качестве аргументов, затем строит соответствующую строку и устанавливает куки.
Например, установка куки без срока хранения:
Установка куки со сроком хранения до 15 февраля 2011:
Функция для удаления куки.
Другая полезная функция для работы с куки представлена ниже. Функция «удаляет» куки из браузера посредством установки срока хранения на одну секунду раньше текущего значения времени.
Для использования данной функции нужно только передать ей имя удаляемого куки:
Получение значения куки
Для того, чтобы получить значение предварительно установленного куки для текущего документа, нужно использовать свойство document.cookie :
Таким образом возвращается строка, которая состоит из списка пар имя/значение, разделенных точкой с запятой для всех куки, которые действуют для текущего документа. Например:
Функция для получения значения куки
Данная функция использует регулярное выражение для поиска имени куки, которое представляет интерес, а затем возвращает значение, которое обработано функцией unescape() для перекодирования к нормальному символьному виду. (Если куки не найдено, возвращается значение null.)
Данная функция проста в использовании. Например, для возврата значения куки username :
Простой пример использования
В данном примере мы сделали страницу, которая запрашивает Ваше имя при первом посещении, затем она сохраняет Ваше имя в куки и показывает его при следующих посещениях.
Откройте страницу в новом окне. При первом посещении она попросит ввести имя и сохранит его в куки. Если Вы посетите страницу еще раз, она отобразит на экране введенное имя из куки.
Для куки задаем срок хранения в 1 год от текущей даты, это означает, что браузер сохранит Ваше имя даже если Вы закроете его.
Вы можете удалить куки нажав на ссылку Забудь обо мне!, которая вызывает функцию delete_cookie() и обновляет страницу, чтобы снова запросить имя у Вас.
Вы можете посмотреть код страницы в браузере, выбрав функцию просмотра исходного кода. Здесь приводится основная часть кода:
Данный урок показал Вам, как использовать куки в JavaScript для хранения информации о Ваших посетителях. Спасибо за внимание! 🙂
Данный урок подготовлен для вас командой сайта ruseller.com
Источник урока: www.elated.com
Перевел: Сергей Фастунов
Урок создан: 15 Июня 2010
Просмотров: 243582
Правила перепечатки
5 последних уроков рубрики «Разное»
Как выбрать хороший хостинг для своего сайта?
Выбрать хороший хостинг для своего сайта достаточно сложная задача. Особенно сейчас, когда на рынке услуг хостинга действует несколько сотен игроков с очень привлекательными предложениями. Хорошим вариантом является лидер рейтинга Хостинг Ниндзя — Макхост.
Проект готов, Все проверено на локальном сервере OpenServer и можно переносить сайт на хостинг. Вот только какую компанию выбрать? Предлагаю рассмотреть хостинг fornex.com. Отличное место для твоего проекта с перспективами бурного роста.
Разработка веб-сайтов с помощью онлайн платформы Wrike
20 ресурсов для прототипирования
Подборка из нескольких десятков ресурсов для создания мокапов и прототипов.
Топ 10 бесплатных хостингов
Небольшая подборка провайдеров бесплатного хостинга с подробным описанием.
Что такое cookie
Многие пользователи сталкиваются с термином «cookie-файлы», однако не все знают, что это и для каких целей они существуют. В этой статье подробно разберем понятие, назначение, пользу и настройку безопасности cookie-файлов для обычного пользователя.
Почему «печенье»?
«Cookie» с английского языка переводится как «печенье». Почему файлы назвали именно так, никто точно не знает. По ходу статьи предложу несколько теорий возникновения этого названия, а какая самая правдоподобная – решайте сами.
Суть технологии cookie
Программисты, работающие с соединением «клиент-сервер», создали специальный набор данных, передаваемый от одной программы к другой. Он нужен для последующей аутентификации пользователя на сайте без повторного идентифицирования. Проще говоря, сервер «узнает» клиента по особым файлам и впускает его сразу, без ввода логина и пароля. Принцип работы cookie напоминает билет в кино: билет – обыкновенная бумажка без собственной ценности, однако она открывает доступ к уникальному контенту.
Появление
Однако факт есть факт: веб-разработчики дали этому набору данных название «magic cookie», т.е. «волшебное печенье». Затем термин упростился до знакомых всем cookie. Впервые технология была представлена в 1994 году, когда сотрудник IT-компании Netscape Communications Лу Монтулли решил использовать при веб-соединении небольшие текстовые файлы.
Тогда же началось активное развитие браузерных программ. 13 октября 1994 года появился легендарный Mosaic Netscape, поддерживающий cookie. Технология была настолько перспективна, что Монтулли подал заявку на патент и в 1998 году получил сертификат.
Недовольства в обществе
Однако реальность была не такой сказочной; внедрение cookie-файлов сопровождалось возмущениями со стороны других специалистов. В 1996 году международная деловая газета Financial Times опубликовала резонансную статью о проблемах приватности. В ней отмечалось, что данные никак не защищены и легко перехватываются.
Дело дошло до Федеральной торговой комиссии США, так как изначально куки предназначались для реализации корзины покупок и сохранения авторизационной информации. Было проведено два слушания, но на развитие технологии это никак не повлияло. Несмотря на то, что вплоть до 2000 года рабочие группы определяли файлы как серьезную угрозу приватности, онлайн-проекты продолжали использовать «печеньки». В октябре 2000 года была принята спецификация RFC 2965 – регламент, регулирующий размер файлов и их использование.
Как создаются cookie
Формирование временных файлов происходит на стороне клиента; текстовая информация оседает в специальных каталогах, созданных браузером. При желании текстовый файл можно открыть «Блокнотом» или любым другим редактором (внутри будет отображена информация о посещенных сайтах).
Для каждого браузера создаются собственные «печенья», поэтому без импортирования (большинство браузеров поддерживают перенос истории посещения, закладок и открытых сайтов) в другом веб-обозревателе придется заново вводить все авторизационные данные.
Можно ли сказать, что сегодня cookie абсолютно безопасны? К сожалению, нет. Однако без них невозможно представить современный интернет. И все же сетевую грамотность никто не отменял, и каждый пользователь может обезопасить себя.
Какую информацию хранят cookie
Сегодня cookie-файлы хранят в браузере практически любую информацию о сайте. Например, сохраняются авторизационные данные аккаунта в социальной сети, поэтому посетителю не нужно каждый раз вводить логин и пароль. Также для ускорения работы подгружаются дополнительные элементы сайтов: шрифты, цвета, история поиска и выбранные формы (например регион или язык).
Cookie особенно ценятся интернет-магазинами. В первую очередь, корректно работает корзина с товарами, которая не очищается даже после закрытия вкладки. Контекстная реклама также работает через cookie: запомнив ваш запрос, поисковая система будет показывать похожий контент.
Все это упрощает жизнь как рекламодателям, так и пользователям. Первые могут легко взаимодействовать с целевой аудиторией, а вторые комфортно серфить и быстро оформлять заказы.
Однако не стоит путать cookie-файлы с кэшем и данными автозаполнения. Кэш – еще один способ, которым пользуются разработчики при оптимизации сайтов. И если cookie – текстовый документ с некой информацией, то в кэше сохраняются «тяжелые данные»: изображения, анимированные фрагменты и так далее. Соответственно, кэш может весить очень много, поэтому его нужно постоянно очищать. Данные автозаполнения – сохраняемый текст, вводимый в формы (электронная почта, логин, номер телефона или пароль). Они также выводятся и очищаются отдельно от cookie.
Виды cookie
Существует несколько видов куки-файлов:
Я уже отмечал, что cookie-файлы имеют определенные проблемы с безопасностью. Однако пугаться не стоит, так как сами текстовые документы не могут заражаться вирусами. Главная опасность – перехват файлов злоумышленниками.
Как обезопасить себя
В cookie хранятся личные данные пользователя, которые открывают доступ к определенному контенту. Например, социальная сеть хранит логин и пароль, допуская клиента к странице без запроса авторизации. Соответственно, если мошенник получит доступ к cookie, он сможет выкрасть информацию и использовать ее в собственных целях.
Этот способ воровства называется cookie stuffing. Чаще всего используется подмена cookie ложной информацией, благодаря которой ни пользователь, ни сайт не смогут определить настоящую авторизацию. Например, оформляя заказ, злоумышленник может послать cookie с якобы прошедшей оплатой, и вместо денег интернет-магазин получит «печенье-пустышку».
Но просто так получить доступ к браузеру не получится. Перехват файлов возможен при:
Некоторые пользователи недовольны обилием контекстной рекламы. Ощущение постоянного слежения и сбора информации может напрягать, а преследующие баннеры и сам факт передачи данных третьим лицам вызывать подозрения. Клиент, разумеется, полностью защищен, однако компании могут идти на ухищрения и недобросовестно использовать cookie.
Когда нужно чистить cookie
И все же удаление cookie – вещь необязательная, которая чаще всего требуется при возникновении проблем с работой какого-то ресурса. Первое, что скажут специалисты, услышав о некорректной работе сайта: «Очистите cookie». И действительно, немало ошибок устраняются удалением текстовых файлов.
Если вы хотите избавиться от надоедливой рекламы, очистить свою историю посещений на чужом компьютере или повысить производительность на слабом устройстве (cookie весят мало, но могут тормозить работу браузера), то смело удаляйте временные файлы.
Для сохранения максимальной анонимности используются VPN-сервисы, а также отключается сохранение cookie. Важно учитывать, что каждый браузер создает собственные файлы, поэтому очистка и настройка в одной программе никак не влияет на другую.
Существуют дополнительный софт, который вместе с временными файлами на компьютере удаляет и все куки. Наиболее популярные решения – CCleaner и Privazer. Некоторые пользователи решают включить блокировку cookie в основном браузере. Большинству юзеров это делать необязательно, так как пострадает качество интернет-серфинга.
Заключение
Появление cookie-файлов упростило работу в интернете. Благодаря им легче проходить авторизацию на сайтах, оплачивать покупки и быстро обращаться к нужным ресурсам. При этом вы контролируете большинство процессов, ведь cookie-файлы несложно удалить. Но не забывайте: обеспечить безопасность устройства – главная задача любого пользователя.