Jquery-cookie: L'utilisation de encodeURIComponent() sur les valeurs de cookie doit être escape()

Créé le 20 janv. 2011  ·  5Commentaires  ·  Source: carhartl/jquery-cookie

EncodeURIComponent() est-il correct ici pour échapper à la valeur du cookie ? Ne devrait-il pas s'agir de « s'échapper » ?

Les cookies entrent et sortent très bien de votre plugin, mais les cookies contenant un nom de chemin ne sont pas vraiment utilisables tels quels par quelqu'un d'autre en raison de votre choix d'encodage.

Commentaire le plus utile

Juste si quelqu'un d'autre trouve cette discussion en cherchant une réponse comme je l'ai fait :

Les cookies sont transmis au serveur sous forme d'en-tête HTTP :

Cookie : nom1=valeur1 ; nom2=valeur2

Évidemment, value1 n'est pas autorisé à contenir un ;

Il y a aussi d'autres personnages problématiques.

Le fait est que les cookies sont fondamentalement entravés par le manque d'encodage. Vous devez choisir un encodage et l'utiliser à la fois dans le navigateur et sur le serveur.

MDN recommande encodeURIComponent : https://developer.mozilla.org/en-US/docs/Web/API/document.cookie

Tous les 5 commentaires

La raison d'utiliser encodeURIComponent / decodeURIComponent était que escape / unescape est obsolète .

A part ça, je n'ai pas encore compris quel est le problème ici. La valeur du cookie passe par decodeURIComponent avant d'être renvoyée ; ainsi, à moins qu'il me manque quelque chose, il devrait être exactement le même que ce qu'il était lorsqu'il était passé dans le cookie. Pourriez-vous s'il vous plaît poster un résumé ou quelque chose pour illustrer le problème?

Enfin, vous pouvez utiliser l'option raw pour contourner l'encodage en premier lieu.

Vous avez raison de dire qu'il est obsolète. EncodeURI() est probablement ce qui est vraiment nécessaire au lieu de encodeURIComponent().

Voici le problème en quelques mots : votre code ne fonctionne que si le cookie est créé et consommé via votre plugin. Si vous créez un cookie avec votre plugin puis essayez de le lire à partir d'une application php ou java, cette application doit savoir que le cookie est encodé avec encodeURIComponent() et doit être urldecoded() sur le backend.

Le principal endroit où cela pose un problème est lorsque vous mettez une URL ou un URI dans un cookie. Disons que je veux mettre "/foo" dans un cookie. EncodeURIComponent() me donne le chemin d'accès inutilisable "%2Ffoo" tandis que encodeURI() me donne "/foo" qui est directement consommable par n'importe quel système backend ou toute autre personne utilisant le cookie sans votre plugin.

L'avantage de encode() ici est en fait que si vous avez un point-virgule dans votre valeur de cookie, il est échappé. encodeURI() n'échappe pas au point-virgule, vous devrez donc ajouter du code pour gérer cela en plus de l'utilisation de encodeURI().

Raw est OK, mais je suppose que vous avez peut-être ajouté cela parce que les gens avaient des problèmes avec l'encodage. Si vous utilisez encodeURI(), vous n'en aurez probablement plus besoin.

Raison pour laquelle je ne peux pas utiliser encodeURI :

encodeURI('foo;bar') == "foo;bar"

Mais:

encodeURIComponent('foo;bar') == "foo%3Bbar"

Ce dernier est le comportement que nous voulons.

raw a en fait été ajouté au compte pour jouer bien avec un serveur.

Je suis curieux de savoir pourquoi vous voulez ce comportement? Luttant pour trouver une réponse ailleurs http://stackoverflow.com/questions/5743119/why-use-encodeuricomponent-when-writing-json-to-a-cookie

Juste si quelqu'un d'autre trouve cette discussion en cherchant une réponse comme je l'ai fait :

Les cookies sont transmis au serveur sous forme d'en-tête HTTP :

Cookie : nom1=valeur1 ; nom2=valeur2

Évidemment, value1 n'est pas autorisé à contenir un ;

Il y a aussi d'autres personnages problématiques.

Le fait est que les cookies sont fondamentalement entravés par le manque d'encodage. Vous devez choisir un encodage et l'utiliser à la fois dans le navigateur et sur le serveur.

MDN recommande encodeURIComponent : https://developer.mozilla.org/en-US/docs/Web/API/document.cookie

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

fohlsom picture fohlsom  ·  3Commentaires

devfrey picture devfrey  ·  3Commentaires

thalesfsp picture thalesfsp  ·  3Commentaires

danieljack picture danieljack  ·  3Commentaires

juriansluiman picture juriansluiman  ·  3Commentaires