Jquery-cookie: O uso de encodeURIComponent () em valores de cookies deve ser escape ()

Criado em 20 jan. 2011  ·  5Comentários  ·  Fonte: carhartl/jquery-cookie

O encodeURIComponent () está correto aqui para escapar do valor do cookie? Não deveria ser "fuga"?

Os cookies entram e saem do seu plug-in sem problemas, mas os cookies que contêm um nome de caminho não podem ser usados ​​como estão por ninguém devido à sua escolha de codificação.

Comentários muito úteis

Apenas se alguém encontrar esta discussão enquanto procura uma resposta como eu:

Os cookies são passados ​​para o servidor como um cabeçalho HTTP:

Cookie: nome1 = valor1; nome2 = valor2

Obviamente, valor1 não pode conter um;

Existem também outros personagens problemáticos.

O fato é que os cookies são fundamentalmente prejudicados pela falta de codificação. Você deve escolher uma codificação e usá-la no navegador e no servidor.

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

Todos 5 comentários

O motivo de usar encodeURIComponent / decodeURIComponent foi que escape / unescape está obsoleto .

Além disso, ainda não entendi qual é o problema aqui. O valor do cookie é executado por meio de decodeURIComponent antes de ser retornado; portanto, a menos que esteja faltando alguma coisa, ela deve ser exatamente a mesma de quando foi passada para o cookie. Você poderia postar uma ideia ou algo para ilustrar o problema?

Por último, você pode usar a opção raw para contornar a codificação em primeiro lugar.

Você está certo sobre o seu uso suspenso. Provavelmente encodeURI () é o que realmente é necessário em vez de encodeURIComponent ().

Aqui está o problema em poucas palavras: seu código funciona apenas se o cookie estiver sendo criado e consumido por meio de seu plug-in. Se você criar um cookie com seu plug-in e tentar lê-lo de um aplicativo php ou java, esse aplicativo deve saber que o cookie está codificado com encodeURIComponent () e deve ser urldecoded () no backend.

O principal lugar em que isso causa um problema é quando você coloca um URL ou URI em um cookie. Digamos que eu queira colocar "/ foo" em um cookie. EncodeURIComponent () me dá o nome de caminho inutilizável "% 2Ffoo", enquanto encodeURI () me dá "/ foo", que pode ser consumido diretamente por qualquer sistema de back-end ou qualquer outra pessoa usando o cookie sem o seu plug-in.

A vantagem de encode () aqui é que, se você tiver um ponto-e-vírgula no valor do cookie, ele será escapado. encodeURI () não escapa do ponto-e-vírgula, então você terá que adicionar algum código para lidar com isso além do uso de encodeURI ().

Raw está OK, mas presumo que talvez você tenha adicionado isso porque as pessoas tiveram problemas com a codificação. Se você usar encodeURI (), provavelmente não precisará mais dele.

Razão pela qual não posso usar encodeURI :

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

Mas:

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

O último é o comportamento que desejamos.

raw foi de fato adicionado à conta por jogar bem com um servidor.

Estou curioso para saber por que você deseja esse comportamento? Lutando para encontrar uma resposta em outro lugar http://stackoverflow.com/questions/5743119/why-use-encodeuricomponent-when-writing-json-to-a-cookie

Apenas se alguém encontrar esta discussão enquanto procura uma resposta como eu:

Os cookies são passados ​​para o servidor como um cabeçalho HTTP:

Cookie: nome1 = valor1; nome2 = valor2

Obviamente, valor1 não pode conter um;

Existem também outros personagens problemáticos.

O fato é que os cookies são fundamentalmente prejudicados pela falta de codificação. Você deve escolher uma codificação e usá-la no navegador e no servidor.

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

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

fohlsom picture fohlsom  ·  3Comentários

akshaysrin picture akshaysrin  ·  3Comentários

danieljack picture danieljack  ·  3Comentários

ghost picture ghost  ·  3Comentários

andrewchch picture andrewchch  ·  3Comentários