1 votes

Comment utiliser un trait d'union dans les noms de cookies pour nginx ?

Je veux utiliser le nouveau Préfixes des cookies qui ne sont pas encore normalisés par l'IETF. Ce sont __Secure- y __Host- .

Ainsi, nous allons par exemple définir ce cookie (ici l'en-tête renvoyé par le serveur) :

Set-Cookie: "__Host-apple=yummy; Secure; HttpOnly; Path=/"

Je veux accéder à ce cookie maintenant dans nginx avec la fonction $cookie- variable. Ainsi, pour les tests, j'utilise le module echo pour me montrer la valeur du cookie :

location = /wannaeat/ {
        echo $cookie___Host-apple;
}

Cependant, nginx me montre toujours -apple . Il semble utiliser le trait d'union ( - ) pour diviser la variable.

Parce que lorsque je nomme par exemple le cookie __Host_apple (et la variable nginx $cookie___Host_apple ) nginx me montre la valeur correctement.

Je sais que je pourrais probablement utiliser $http_cookie et utiliser une expression régulière pour trouver le bon cookie, mais ce n'est pas possible car je veux map la valeur du cookie.

2voto

cnst Points 12508

Tout d'abord, map prend en charge la correspondance avec les expressions régulières :

Les valeurs sources sont spécifiées sous forme de chaînes de caractères ou d'expressions régulières (0.9.6).

(Ainsi, vous devriez probablement être prêt à partir !)


Toutefois, dans l'intérêt de la discussion et des commentaires, étant donné que ce que vous tentez d'utiliser n'est pas encore une norme, vous feriez mieux d'aller sur leurs listes de diffusion ou autres, et de leur dire que ce qu'ils proposent de faire est une très mauvaise idée.

Pour le plaisir, je me suis rendu dans le Gestionnaire de cookies de mon navigateur pour vérifier l'utilisation de l'adresse IP. _ l'underscore contre - le trait le plus court. Le trait de soulignement est largement utilisé par au moins 90 % des sites/cookies, tandis que l'utilisation du tiret dans les cookies est probablement bien inférieure à 5 %.

La raison pour laquelle - n'est pas valide dans les noms de variables est très simple et est aussi vieux que le jour -- parce que le symbole est souvent utilisé dans presque tous les langages de programmation à la place du signe moins (tiret, moins, mdash : ---). A son tour, selon re_format(7) y pcrepattern(3) Ce scénario fait également partie des implémentations d'expressions régulières largement utilisées, dans lesquelles un trait de soulignement est toujours considéré comme faisant partie d'un mot, alors que le tiret ne l'est pas.

J'imagine que le même problème se répète dans de nombreuses autres langues ainsi qu'avec nginx.conf.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X