Jquery-cookie: El uso de encodeURIComponent () en los valores de las cookies debe ser escape ()

Creado en 20 ene. 2011  ·  5Comentarios  ·  Fuente: carhartl/jquery-cookie

¿Es encodeURIComponent () correcto aquí para escapar del valor de la cookie? ¿No debería ser "escapar"?

Las cookies entran y salen de su complemento sin problemas, pero las cookies que contienen un nombre de ruta no son realmente utilizables por nadie más debido a su elección de codificación.

Comentario más útil

Solo si alguien más encuentra esta discusión mientras busca una respuesta como lo hice yo:

Las cookies se pasan al servidor como un encabezado HTTP:

Cookie: nombre1 = valor1; nombre2 = valor2

Obviamente, value1 no puede contener un;

También hay otros personajes problemáticos.

El hecho es que las cookies se ven obstaculizadas fundamentalmente por la falta de codificación. Tienes que elegir una codificación y usarla tanto en el navegador como en el servidor.

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

Todos 5 comentarios

La razón para usar encodeURIComponent / decodeURIComponent fue que escape / unescape está en desuso .

Aparte de eso, todavía no he entendido cuál es el problema aquí. El valor de la cookie se ejecuta a través de decodeURIComponent antes de que se devuelva; por lo tanto, a menos que me falte algo, debería ser exactamente igual que cuando se pasó a la cookie. ¿Podría publicar una idea general o algo para ilustrar el problema?

Por último, no menos importante, puede usar la opción raw para omitir la codificación en primer lugar.

Tiene razón en que está en desuso. Probablemente encodeURI () es lo que realmente se necesita en lugar de encodeURIComponent ().

Este es el problema en pocas palabras: su código solo funciona si la cookie se crea y consume a través de su complemento. Si crea una cookie con su complemento y luego intenta leerla desde una aplicación php o java, esa aplicación debe saber que la cookie está codificada con encodeURIComponent () y debe estar urldecoded () en el backend.

El lugar principal donde esto causa un problema es cuando coloca una URL o URI en una cookie. Digamos que quiero poner "/ foo" en una cookie. EncodeURIComponent () me da el nombre de ruta inutilizable "% 2Ffoo" mientras que encodeURI () me da "/ foo" que es consumible directamente por cualquier sistema backend o cualquier otra persona que use la cookie sin su complemento.

La ventaja de encode () aquí es en realidad que si tiene un punto y coma en el valor de su cookie, se escapa. encodeURI () no escapa del punto y coma, por lo que tendrá que agregar algo de código para manejar eso además del uso de encodeURI ().

Raw está bien, pero supongo que tal vez lo agregó porque la gente tenía problemas con la codificación. Si usa encodeURI (), probablemente ya no lo necesite.

Razón por la que no puedo usar encodeURI :

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

Pero:

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

Este último es el comportamiento que queremos.

raw se agregó a la cuenta por jugar bien con un servidor.

Tengo curiosidad por saber por qué quieres ese comportamiento. Luchando por encontrar una respuesta en otro lugar http://stackoverflow.com/questions/5743119/why-use-encodeuricomponent-when-writing-json-to-a-cookie

Solo si alguien más encuentra esta discusión mientras busca una respuesta como lo hice yo:

Las cookies se pasan al servidor como un encabezado HTTP:

Cookie: nombre1 = valor1; nombre2 = valor2

Obviamente, value1 no puede contener un;

También hay otros personajes problemáticos.

El hecho es que las cookies se ven obstaculizadas fundamentalmente por la falta de codificación. Tienes que elegir una codificación y usarla tanto en el navegador como en el servidor.

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

¿Fue útil esta página
0 / 5 - 0 calificaciones