Я хочу использовать новые префиксы cookie , которые еще не стандартизированы IETF . Это __ Secure-
и __ Host-
.
Итак, давайте, например, установим этот файл cookie (здесь заголовок, возвращаемый сервером):
Set-Cookie: "__Host-apple=yummy; Secure; HttpOnly; Path=/"
Я хочу получить доступ к этому файлу cookie сейчас в nginx с переменной $ cookie-
. Поэтому для тестирования я использую модуль echo, чтобы показать мне значение cookie:
location = /wannaeat/ {
echo $cookie___Host-apple;
}
Однако nginx всегда показывает мне -apple
. Кажется, что для разделения переменной используется дефис ( -
).
Потому что, когда я, например, назовите файл cookie __ Host_apple
(и переменную nginx $ cookie ___ Host_apple
) nginx правильно показывает мне значение.
Я знаю, что, вероятно, мог бы использовать $ http_cookie
и использовать регулярное выражение для поиска правильного файла cookie, но это невозможно, так как я хочу сопоставить
значение cookie.
Прежде всего, map
фактически поддерживает сопоставление с регулярными выражениями:
Исходные значения указываются в виде строк или регулярные выражения (0.9.6).
(Таким образом, вам, вероятно, будет хорошо!)
Однако, для обсуждения и комментариев, поскольку то, что вы пытаетесь использовать, еще не является стандартом, вам лучше пойти в их списки рассылки или еще что-то , и скажите им, что то, что они предлагают сделать, - действительно плохая идея.
Просто ради этого я зашел в диспетчер файлов cookie в своем браузере, чтобы взглянуть на использование _
подчеркивание против -
самого короткого тире. Подчеркивание активно используется по крайней мере на 90% сайтов / файлов cookie, тогда как использование тире в файлах cookie, вероятно, намного ниже 5%.
Причина, по которой -
недопустима в именах переменных, очень проста и стара как день - потому что этот символ часто используется практически во всех языках программирования вместо знака минус (тире, минус, mdash: -−-). В свою очередь, согласно re_format (7)
и pcrepattern (3)
, этот сценарий также является частью широко используемых реализаций регулярных выражений, где подчеркивание всегда считается частью слова, а символ тире - нет.
Я полагаю, что та же проблема повторится во многих других языках, а также в nginx.conf.