Файл cookie — это фрагмент данных, хранящийся в браузере и используемый для сохранения состояния и другой информации, необходимой веб-сайту для выполнения своих функций.
Файл cookie — это небольшой файл, который веб-сайты сохраняют на компьютере пользователя; содержащаяся в нем информация передается между браузером и веб-сайтом.
Каждый cookie-файл представляет собой пару ключ-значение, а также ряд атрибутов, которые определяют, когда и где этот cookie-файл используется. Эти атрибуты используются для установки таких параметров, как срок действия или указание на то, что cookie-файл должен передаваться только по протоколу HTTPS. Вы можете установить cookie-файл в заголовке HTTP или через интерфейс JavaScript.
Файлы cookie — один из способов добавления постоянного состояния к веб-сайтам. За прошедшие годы их возможности расширились и развились, но платформа сохранила некоторые проблемные устаревшие функции. Для решения этой проблемы браузеры (включая Chrome, Firefox и Edge) меняют свое поведение, чтобы обеспечить более щадящие для конфиденциальности настройки по умолчанию.
Печенье в действии
Допустим, у вас есть блог, где вы хотите показывать пользователям рекламную акцию «Что нового». Пользователи могут закрыть эту акцию, и она больше не будет отображаться некоторое время. Вы можете сохранить эту настройку в cookie, установить срок действия в месяц (2 600 000 секунд) и отправлять её только по HTTPS. Заголовок будет выглядеть примерно так:
Set-Cookie: promo_shown=1; Max-Age=2600000; Secure

Set-Cookie .Когда ваш читатель просматривает страницу, отвечающую этим требованиям — он находится в защищенном соединении, и срок действия cookie-файла составляет менее месяца — его браузер отправит следующий заголовок в своем запросе:
Cookie: promo_shown=1

Cookie . Вы также можете добавлять и считывать доступные для этого сайта файлы cookie с помощью JavaScript, используя document.cookie . Присвоение значения document.cookie создаст или переопределит файл cookie с этим ключом. Например, вы можете попробовать следующее в консоли JavaScript вашего браузера:
→ document.cookie = "promo_shown=1; Max-Age=2600000; Secure"
← "promo_shown=1; Max-Age=2600000; Secure"
При чтении файла document.cookie будут выведены все доступные в текущем контексте файлы cookie, при этом каждый файл cookie будет отделен точкой с запятой:
→ document.cookie;
← "promo_shown=1; color_theme=peachpuff; sidebar_loc=left"

document.cookie . Если вы попробуете это на нескольких популярных сайтах, вы заметите, что большинство из них устанавливают значительно больше, чем три файла cookie. В большинстве случаев эти файлы cookie отправляются с каждым запросом к этому домену, что имеет ряд последствий. Пропускная способность для загрузки часто более ограничена, чем для скачивания, поэтому накладные расходы на все исходящие запросы увеличивают время до получения первого байта. Будьте осторожны с количеством и размером устанавливаемых файлов cookie. Используйте атрибут Max-Age , чтобы гарантировать, что файлы cookie не будут храниться дольше, чем необходимо.
Что такое файлы cookie первой и третьей стороны?
Если вы вернетесь к тому же списку сайтов, который просматривали ранее, вы, вероятно, заметите, что там присутствуют файлы cookie для различных доменов, а не только для того, который вы сейчас посещаете. Файлы cookie, соответствующие домену текущего сайта, то есть тому, что отображается в адресной строке браузера, называются файлами cookie первой стороны . Аналогично, файлы cookie с доменов, отличных от текущего сайта, называются файлами cookie третьей стороны . Это не абсолютное определение, а относительное, зависящее от контекста пользователя; один и тот же файл cookie может быть как первой, так и третьей стороной в зависимости от того, на каком сайте пользователь находится в данный момент.

Продолжая предыдущий пример, предположим, что в одном из ваших постов в блоге есть фотография удивительной кошки, размещенная по адресу /blog/img/amazing-cat.png . Поскольку это такое потрясающее изображение, другой человек использует его непосредственно на своем сайте. Если посетитель зашел на ваш блог и имеет cookie-файл promo_shown , то при просмотре amazing-cat.png на сайте другого человека этот cookie-файл будет отправлен в запросе на изображение. Это не особенно полезно для кого-либо, поскольку promo_shown не используется ни для чего на сайте другого человека, а просто добавляет накладные расходы к запросу.
Если это непреднамеренный эффект, зачем вам это нужно? Именно этот механизм позволяет сайтам сохранять состояние при использовании в контексте третьих лиц. Например, если вы встраиваете видео с YouTube на свой сайт, посетители увидят в плеере опцию «Посмотреть позже». Если посетитель уже авторизован на YouTube, эта сессия становится доступной во встроенном плеере благодаря стороннему cookie-файлу — это означает, что кнопка «Посмотреть позже» просто сохранит видео за один раз, вместо того чтобы запрашивать у пользователя авторизацию или перенаправлять его с вашей страницы обратно на YouTube.

Одна из культурных особенностей интернета заключается в том, что он, как правило, открыт по умолчанию. Это отчасти позволило многим людям создавать собственный контент и приложения в сети. Однако это также породило ряд проблем безопасности и конфиденциальности. Атаки типа межсайтовой подделки запросов (CSRF) основаны на том факте, что к любому запросу к определенному источнику, независимо от того, кто его инициирует, прикрепляются файлы cookie. Например, если вы посетите evil.example , это может инициировать запросы к your-blog.example , и ваш браузер с удовольствием прикрепит соответствующие файлы cookie. Если ваш блог не будет осторожен с проверкой этих запросов, evil.example может инициировать такие действия, как удаление сообщений или добавление собственного контента.
Пользователи также всё больше осознают, как файлы cookie могут использоваться для отслеживания их активности на разных сайтах. Однако до сих пор не было способа явно указать свои намерения относительно использования файла cookie. Ваш файл cookie promo_shown должен отправляться только в контексте первого сайта, тогда как сессионный файл cookie для виджета, предназначенного для встраивания на другие сайты, предназначен для предоставления состояния авторизации в контексте третьего сайта.
Вы можете явно указать свои намерения с помощью cookie, установив соответствующий атрибут SameSite .
Чтобы определить ваши собственные файлы cookie и установить соответствующие атрибуты, ознакомьтесь с рецептами использования собственных файлов cookie .