Запятая является допустимым символом в значении cookie
На некоторых веб-серверах файл cookie со значением запятой будет разделен на два файла cookie (один с пустым значением). Например, "foo=bar,goo"
будет рассматриваться как "foo=bar;goo="
, Это правильно в соответствии с RFC?
Я нахожу этот документ RFC, но не знаю точно, что это значит.
cookie-pair = cookie-name "=" cookie-value
cookie-name = token
cookie-value = *cookie-octet / ( DQUOTE *cookie-octet DQUOTE )
cookie-octet = %x21 / %x23-2B / %x2D-3A / %x3C-5B / %x5D-7E
; US-ASCII characters excluding CTLs,
; whitespace DQUOTE, comma, semicolon,
; and backslash
4 ответа
cookie-pair = cookie-name "=" cookie-value
cookie-name = token
cookie-value = *cookie-octet / ( DQUOTE *cookie-octet DQUOTE )
cookie-octet = %x21 / %x23-2B / %x2D-3A / %x3C-5B / %x5D-7E
; US-ASCII characters excluding CTLs,
; whitespace DQUOTE, comma, semicolon,
; and backslash
Что это за ключевые слова: cookie-пара, cookie-имя, cookie-значение, cookie-октет?
cookie-value
правая часть =
,
cookie-octet
является реальным значением, заключенным в двойные кавычки или ничего. Увидеть:
key="value"
или же
key=value
Когда вы кладете в ,
(или же ;
) посмотрим что получится
key="value,",key2="value2"
или же
key=value,,key2=value2
Таким образом, ваше предположение не совсем верно, и вы не должны использовать запятую или точку с запятой внутри значения.
НЕТ они не допускаются.
Из спецификации:
Эта строка представляет собой последовательность символов, исключая точку с запятой, запятую и пробел.
Согласно части документа, которую вы указали, запятые не допускаются:
US-ASCII characters excluding CTLs, whitespace DQUOTE, comma, semicolon, and backslash
Тем не менее, я полагаю, что все современные браузеры позволяют это в любом случае, поэтому используйте его на свой страх и риск. Вы всегда можете использовать base64 или что-то подобное в зависимости от вашей цели, если вам нужно кодировать специальные символы и соблюдать совместимость.
Спецификация 6265 RFC и другие подобные спецификации используют грамматику ABNF :
cookie-octet = %x21 / %x23-2B / %x2D-3A / %x3C-5B / %x5D-7E
; US-ASCII characters excluding CTLs,
; whitespace DQUOTE, comma, semicolon,
; and backslash
Строки, начинающиеся с;
являются комментариями. Они полезны, но не имеют грамматического значения.
Косые черты/
отдельные альтернативы.
Литеральные символы и диапазоны указываются с использованием восьмеричного представления:
%x21 is !
%x23-2B encompass the characters # $ % & ' ( ) * +
%x2D-3A encompass the characters - . / 0-9 :
%x3C-5B encompass the characters < = > ? @ A-Z [
%x5D-7E encompass the characters ] ^ _ ` a-z { | } ~
Код запятой0x2C
не включен ни в один из диапазонов, что делает его недопустимым символом для использования вcookie-octet
илиcookie-value
.