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

Потому что, когда я, например, назовите файл cookie __ Host_apple (и переменную nginx $ cookie ___ Host_apple ) nginx правильно показывает мне значение.

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

0
задан 6 July 2016 в 14:04
1 ответ

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

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

(Таким образом, вам, вероятно, будет хорошо!)


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

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

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

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

1
ответ дан 4 December 2019 в 16:34

Теги

Похожие вопросы