web-dev-qa-db-fra.com

Les valeurs des cookies doivent-elles être encodées en URL?

Lors de la configuration des cookies, PHP code-URL la valeur du cookie (au moins lorsqu'il n'utilise pas setrawcookie) et il décode-url la valeur du cookie avant de faire il disponible pour l'application dans $_COOKIE.

Est-ce une norme acceptée? Si je définit une valeur de cookie brute de a%3Db, pourrais-je revenir a=b dans la plupart des langages de programmation Web (via leurs mécanismes respectifs de lecture des cookies)?

10
AndreKR

Oui. Bien que ce ne soit pas requis selon les spécifications, ce qui suit est mentionné dans RFC6265 (l'accent est mis dans le document d'origine, non ajouté)

Pour maximiser la compatibilité avec les agents utilisateurs, les serveurs qui souhaitent stocker des données arbitraires dans une valeur de cookie DEVRAIENT coder ces données, par exemple, en utilisant Base64 [RFC4648].

D'après mon expérience, la plupart des cadres Web et des bibliothèques pour les cookies ont des méthodes pour encoder/décoder les valeurs des cookies. Dans de nombreux cas, en particulier. dans les frameworks et les langages de haut niveau, cela est résumé et fait automatiquement.

Cette réponse fournit un historique assez détaillé des valeurs autorisées dans les cookies. Cela pourrait vous intéresser.

5
sytech

la réponse de sytech (que j'ai acceptée) est certainement correcte car elle cite la spécification, mais puisque la spécification est plutôt vague, voici un aperçu de la façon dont certains frameworks web traitent réellement la question:

RFC6265:           "for example Base64"
PHP:               URL encode
Go:                raw
Node.js + Express: URL encode
4
AndreKR

Volé à NCZOnline :

Il y a une certaine confusion sur le codage d'une valeur de cookie. La croyance répandue est que les valeurs des cookies doivent être codées par URL, mais c'est une erreur même s'il s'agit de la mise en œuvre de facto. La spécification d'origine indique que seuls trois types de caractères doivent être codés: point-virgule, virgule et espace blanc. La spécification indique que le codage d'URL peut être utilisé, mais ne l'exige pas. Le RFC ne fait aucune mention d'encodage que ce soit. Pourtant, presque toutes les implémentations effectuent une sorte de codage d'URL sur les valeurs des cookies. Dans le cas des formats nom = valeur, le nom et la valeur sont généralement codés séparément tandis que le signe égal est laissé tel quel.

2
Paul Sturm