Назад | Перейти на главную страницу

Как использовать дефис в именах файлов cookie для nginx?

Я хочу использовать новый 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. Кажется, используется дефис (-), чтобы разделить переменную.

Потому что, когда я, например, назовите куки __Host_apple (и переменная nginx $cookie___Host_apple) nginx правильно показывает мне значение.

Я знаю, что мог бы использовать $http_cookie и используйте регулярное выражение, чтобы найти правильный файл cookie, но это невозможно, так как я хочу map значение cookie.

Прежде всего, map действительно поддерживает сопоставление с регулярными выражениями:

Исходные значения указываются в виде строк или регулярных выражений (0.9.6).

(Таким образом, вы, вероятно, должны быть готовы к работе!)


Однако для обсуждения и комментариев, поскольку то, что вы пытаетесь использовать, еще не является стандартом, вам лучше зайти в их списки рассылки или еще что-то и сказать им, что то, что они предлагают сделать, - действительно плохая идея. .

Просто ради этого я зашел в диспетчер файлов cookie в своем браузере, чтобы взглянуть на использование _ подчеркивание против - кратчайший рывок. Подчеркивание активно используется по крайней мере 90% сайтов / файлов cookie, тогда как использование тире в файлах cookie, вероятно, намного ниже 5%.

Причина почему - недопустим в именах переменных, очень просто и стара как день - потому что этот символ часто используется почти во всех языках программирования вместо знака минус (тире, минус, mdash: -−-). В свою очередь, согласно re_format(7) и pcrepattern(3), этот сценарий также является частью широко используемых реализаций регулярных выражений, где подчеркивание всегда считается частью слова, а символ тире - нет.

Я предполагаю, что такая же проблема повторится на многих других языках, а также с nginx.conf.