Jquery-cookie: Die Verwendung von encodeURIComponent() für Cookie-Werte sollte escape() sein

Erstellt am 20. Jan. 2011  ·  5Kommentare  ·  Quelle: carhartl/jquery-cookie

Ist encodeURIComponent() hier richtig, um den Wert des Cookies zu umgehen? Sollte es nicht "Flucht" heißen?

Cookies kommen problemlos in Ihr Plugin ein und aus, aber Cookies, die einen Pfadnamen enthalten, können aufgrund Ihrer Wahl der Kodierung nicht wirklich von anderen verwendet werden.

Hilfreichster Kommentar

Nur wenn noch jemand diese Diskussion findet, während er nach einer Antwort sucht, wie ich es getan habe:

Cookies werden als HTTP-Header an den Server übergeben:

Cookie: Name1=Wert1; name2=wert2

Wert1 darf natürlich kein ;

Es gibt auch andere problematische Charaktere.

Tatsache ist, dass Cookies durch die fehlende Verschlüsselung grundsätzlich erschwert werden. Sie müssen eine Kodierung auswählen und diese sowohl im Browser als auch auf dem Server verwenden.

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

Alle 5 Kommentare

Der Grund für die Verwendung von encodeURIComponent / decodeURIComponent war, dass escape / unescape veraltet ist .

Abgesehen davon habe ich noch nicht verstanden, was hier das Problem ist. Der Cookie-Wert durchläuft decodeURIComponent, bevor er zurückgegeben wird. Daher sollte es genau so sein, wie es bei der Übergabe an den Cookie war, es sei denn, ich vermisse etwas. Könnten Sie bitte eine Zusammenfassung oder etwas posten, um das Problem zu veranschaulichen?

Zu guter Letzt können Sie die Option raw , um die Codierung überhaupt zu umgehen.

Sie haben Recht, dass es veraltet ist. Wahrscheinlich wird encodeURI() anstelle von encodeURIComponent() wirklich benötigt.

Hier ist das Problem in Kürze: Ihr Code funktioniert nur, wenn das Cookie über Ihr Plugin erstellt und verwendet wird. Wenn Sie mit Ihrem Plugin ein Cookie erstellen und dann versuchen, es aus einer PHP- oder Java-App zu lesen, muss diese App wissen, dass das Cookie mit encodeURIComponent() kodiert ist und im Backend urldecoded() sein sollte.

Dies verursacht hauptsächlich ein Problem, wenn Sie eine URL oder einen URI in ein Cookie einfügen. Nehmen wir an, ich möchte "/foo" in ein Cookie einfügen. EncodeURIComponent() gibt mir den unbrauchbaren Pfadnamen "%2Ffoo", während encodeURI() mir "/foo" gibt, das direkt von jedem Backend-System oder jedem anderen verwendet werden kann, der das Cookie ohne Ihr Plugin verwendet.

Der Vorteil von encode() besteht hier darin, dass ein Semikolon in Ihrem Cookie-Wert mit Escapezeichen versehen wird. encodeURI() maskiert das Semikolon nicht, daher müssen Sie zusätzlich zur Verwendung von encodeURI() etwas Code hinzufügen, um dies zu handhaben.

Raw ist in Ordnung, aber ich gehe davon aus, dass Sie das vielleicht hinzugefügt haben, weil die Leute Probleme mit der Codierung hatten. Wenn Sie encodeURI() verwenden, benötigen Sie es wahrscheinlich nicht mehr.

Grund, warum ich encodeURI nicht verwenden kann:

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

Aber:

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

Letzteres ist das Verhalten, das wir wollen.

raw wurde tatsächlich hinzugefügt, um mit einem Server nett zu spielen.

Mich interessiert, warum Sie dieses Verhalten wollen? Probleme, anderswo eine Antwort zu finden http://stackoverflow.com/questions/5743119/why-use-encodeuricomponent-when-writing-json-to-a-cookie

Nur wenn noch jemand diese Diskussion findet, während er nach einer Antwort sucht, wie ich es getan habe:

Cookies werden als HTTP-Header an den Server übergeben:

Cookie: Name1=Wert1; name2=wert2

Wert1 darf natürlich kein ;

Es gibt auch andere problematische Charaktere.

Tatsache ist, dass Cookies durch die fehlende Verschlüsselung grundsätzlich erschwert werden. Sie müssen eine Kodierung auswählen und diese sowohl im Browser als auch auf dem Server verwenden.

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

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen