Установить куки (Set-Cookie)

Синтаксис:

Set-Cookie: <cookie-name>=<cookie-value> 
Set-Cookie: <cookie-name>=<cookie-value>; Expires=<date>
Set-Cookie: <cookie-name>=<cookie-value>; Max-Age=<non-zero-digit>
Set-Cookie: <cookie-name>=<cookie-value>; Domain=<domain-value>
Set-Cookie: <cookie-name>=<cookie-value>; Path=<path-value>
Set-Cookie: <cookie-name>=<cookie-value>; Secure
Set-Cookie: <cookie-name>=<cookie-value>; HttpOnly

Set-Cookie: <cookie-name>=<cookie-value>; SameSite=Strict
Set-Cookie: <cookie-name>=<cookie-value>; SameSite=Lax
Set-Cookie: <cookie-name>=<cookie-value>; SameSite=None  

// Multiple directives are also possible, for example:
Set-Cookie: <cookie-name>=<cookie-value>; Domain=<domain-value>; Secure; HttpOnly

 

<cookie-name>=<cookie-value>

Cookie начинается с пары имя-значение:

  • <cookie-name> может содержать любые символы US-ASCII, за исключением управляющих символов (CTLs), пробелов, или табуляций. Оно также не должно содержать разделительнных символов, таких как следующие: ( ) < > @ , ; : \ » / [ ] ? = { }.
  • <cookie-value> может быть опционально заключено в двойные кавычки, разрешены любые символы US-ASCII за исключением CTLs, пробела, двойных кавычек, запятой, точки с запятой, и обратного слэша. Кодирование: Многие реализации выполняют кодирование в значениях cookies, однако этого не требуется по спецификации RFC. Однако, это помогает удовлетворить требование о разрешенных символах в <cookie-value>.
  • __Secure- prefix: Cookies с именем, начинающимся с __Secure- (подчеркивание является частью префикса ) должны быть установлены вместе с флагом secure, и должны быть с безопасной страницы (HTTPS).
  • __Host- prefix : Cookies с именем, начинающимся с __Host- должны быть установлены с флагом secure secure, должны быть с безопасной страницы (HTTPS), не должны иметь определенный домен (и, следовательно, не не посылаются поддоменами), а также параметр Path должен быть «/».

Expires=<date> Необязательный

Максимальное время жизни cookie в формате метки даты-времени HTTP. См. Date о деталях формата Если не определен, cookie будет иметь время жизни сессионного cookie. Сессия окончена, когда клиент отключается, что приводит к удалению сессионных cookie в этот момент. Однако, многие браузеры имеют возможность, называемую восстановление сессии, которая сохраняет все ваши вкладки и затем возвращает их, когда вы в следующий раз запускаете браузер. Cookies будут также присутствовать, словно вы никогда не закрывали браузер.

Когда установливается срок действия, время и дата устанавливаются не относитеьно сервера, а относительно клиента, на котором установлено cookie.

Max-Age=<number> Необязательный

Количество секунд, после которого cookie устаревает. Ноль или отрицательное число приводят к устареванию куки не медленно. Старые браузеры (ie6, ie7, and ie8) не поддерживают max-age. Для прочих браузеров, если оба параметра (Expires and Max-Age) установлены, Max-Age будет иметь преимущество.

Domain=<domain-value> Необязательный

Указываются те хосты, на которые будут отправлятся куки. По умолчанию используется хост текущего местоположения (но не включая поддоменов). В отличие от более ранних спецификаций, начальные точки в доменных именах игнорируются. Если указан домен, субдомены всегда включены.

Path=<path-value> Необязательный

Указывает URL-путь, который должен существовать в запрашиваемом ресурсе перед отправкой заголовка Cookie. Символ %x2F («/») интерпретируется как разделитель каталогов, и подкаталоги также будут сопоставляться (например, path=/docs, «/docs», «/docs/Web/» или «/docs/Web/HTTP» все будет сопоставлено).

Secure Необязательный

Безопасный файл cookie отправляется на сервер только тогда, когда запрос сделан с использованием SSL и протокола HTTPS. Однако конфиденциальная или конфиденциальная информация никогда не должна храниться или передаваться в файлах cookie HTTP, поскольку весь механизм по своей природе небезопасен, и это не означает, что любая информация, например, зашифрована.

Примечание. Небезопасные сайты (http:) больше не могут устанавливать файлы cookie с помощью директивы «secure» (начиная с версий Chrome 52+ и Firefox 52+).

HttpOnly Необязательный

Куки только для HTTP не доступны через JavaScript через свойство Document.cookie, API XMLHttpRequest или API запросов для предотвращения атак на межсайтовый скриптинг (XSS).

SameSite=<samesite-value> Необязательный

  • Strict
  • Lax
  • None

Позволяет серверам утверждать, что cookie не следует отправлять вместе с межсайтовыми запросами, что обеспечивает некоторую защиту от атак подделки межсайтовых запросов (CSRF).

 

Примеры:

Set-Cookie: sessionid=38afes7a8; HttpOnly; Path=/

Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT; Secure; HttpOnly

Set-Cookie: qwerty=219ffwef9w0f; Domain=somecompany.co.uk; Path=/; Expires=Wed, 30 Aug 2019 00:00:00 GMT

// Both accepted when from a secure origin (HTTPS)
Set-Cookie: __Secure-ID=123; Secure; Domain=example.com
Set-Cookie: __Host-ID=123; Secure; Path=/

// Rejected due to missing Secure directive
Set-Cookie: __Secure-id=1

// Rejected due to the missing Path=/ directive
Set-Cookie: __Host-id=1; Secure

// Rejected due to setting a domain
Set-Cookie: __Host-id=1; Secure; Path=/; domain=example.com

Источник: https://developer.mozilla.org/ru/docs/Web/HTTP/Заголовки/Set-Cookie