Ich habe Schwierigkeiten herauszufinden, was ist der Standard (oder gibt es irgendwelche?) Für die Codierung/Decodierung von Cookie-Werten unabhängig von Backend-Plattformen.Sprache agnostische Cookies Codierung/Decodierung Standards
Nach RFC 2109:
Der Wert ist undurchlässig für die Agenten Benutzer und kann alles sein, der Ursprungs-Server, möglicherweise in einem Server-ausgewählte druckbaren ASCII-Kodierung gesendet wählt. "Opaque" bedeutet, dass der Inhalt nur für den Ursprungsserver von Interesse und relevant ist. Der Inhalt kann tatsächlich von jedem gelesen werden, der den Set-Cookie-Header untersucht.
was klingt wie "Server ist der Chef" und es entscheidet, was die Codierung anwenden wird. Dies macht es ziemlich schwierig, ein Cookie beispielsweise aus dem PHP-Backend zu setzen und es aus Python oder Java oder ähnlichem zu lesen, ohne eine manuelle Codierung/Decodierung auf beiden Seiten zu schreiben.
Sagen wir, wir haben einen Wert, der codiert werden muss. Russisch /"печенье (*} значения"/
bedeutet "Cookie-Wert" mit einigen zusätzlichen nicht-alphanumerischen Zeichen darin.
Python:
Fast jeder WSGI Server macht das gleiche und verwendet SimpleCookie Klasse Python, das codiert zu/von octal literals decodiert, obwohl viele sagen, dass octal literals are depreciated in ECMA-262, Strict-Modus. WTF?
Also, unsere raw Cookie-Wert wird "/\"\320\277\320\265\321\207\320\265\320\275\321\214\320\265 (*} \320\267\320\275\320\260\321\207\320\265\320\275\320\270\321\217\"/"
Node.js:
Haben nicht getestet, aber ich vermute, nur ein JavaScript-Backend mit nativer encodeURIComponent und decodeURIComponent Funktionen tun würde das verwenden hexadecimal entkommen/unescaping?
PHP:
PHP gilt urlencode auf die Cookie-Werte, die encodeURIComponent ähnlich, aber nicht genau das gleiche.
So wird der Rohwert; %2F%22%D0%BF%D0%B5%D1%87%D0%B5%D0%BD%D1%8C%D0%B5+%28%2A%7D+%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D1%8F%22%2F
das ist nicht einmal mit Anführungszeichen umwickelt.
Jedoch; wenn der JavaScript value
Variable, die den PHP-codierten Wert oben hat, gibt decodeURIComponent(value)
/"печенье+(*}+значения"/
finden Sie unter "+" Zeichen anstelle von Leerzeichen ..
Wie ist die Situation in Java, Ruby, Perl und .NET? Welche Sprache (oder am nächsten) dem gewünschten Verhalten folgt. Gibt es dafür einen Standard für W3?
+1 für die unsichtbare Tinte! Obwohl Cookies sehr gut verwendet werden können, um strukturierte Daten zwischen Servern auf ein und derselben Domain zu teilen. – flup
ja, gutes Beispiel. Ich würde gerne das Kopfgeld dazu geben, wenn es die Frage in ** fettem ** Teil beantwortet. wie auch immer, Cookies sollten unabhängig von der Art der Daten, die sie übertragen, plattformübergreifend gelesen werden können. traurig und Schmerz in den Arsch. – kirpit
Ich glaube ich habe deine Frage endlich verstanden und meine Antwort entsprechend bearbeitet. – Hazzit