Jquery-cookie: Использование encodeURIComponent () для значений файлов cookie должно быть escape ()

Созданный на 20 янв. 2011  ·  5Комментарии  ·  Источник: carhartl/jquery-cookie

Правильно ли здесь encodeURIComponent () для экранирования значения cookie? Разве это не должно быть «побегом»?

Файлы cookie входят в ваш плагин и выходят из него нормально, но файлы cookie, содержащие имя пути, на самом деле не могут использоваться кем-либо как есть из-за вашего выбора кодировки.

Самый полезный комментарий

Просто если кто-то еще найдет это обсуждение при поиске ответа, как я:

Файлы cookie передаются на сервер в виде HTTP-заголовка:

Cookie: имя1 = значение1; имя2 = значение2

Очевидно, что value1 не может содержать a;

Есть и другие проблемные персонажи.

Дело в том, что куки-файлы принципиально затруднены из-за отсутствия кодировки. Вы должны выбрать кодировку и использовать ее как в браузере, так и на сервере.

MDN рекомендует encodeURIComponent: https://developer.mozilla.org/en-US/docs/Web/API/document.cookie.

Все 5 Комментарий

Причина использования encodeURIComponent / decodeURIComponent заключалась в том, что escape / unescape устарело .

Кроме того, я еще не понял, в чем проблема. Значение cookie перед возвратом проходит через decodeURIComponent; таким образом, если я чего-то не упускаю, он должен быть точно таким же, как и при передаче в файл cookie. Не могли бы вы опубликовать суть или что-нибудь, чтобы проиллюстрировать проблему?

И последнее, что не менее важно, вы можете использовать параметр raw чтобы в первую очередь обойти кодировку.

Вы правы, что он устарел. Вероятно, encodeURI () - это то, что действительно нужно вместо encodeURIComponent ().

Вот вкратце проблема: ваш код работает только в том случае, если cookie создается и используется через ваш плагин. Если вы создаете файл cookie с помощью своего плагина, а затем пытаетесь прочитать его из приложения php или java, это приложение должно знать, что файл cookie закодирован с помощью encodeURIComponent () и должен иметь urldecoded () на бэкэнде.

Основное место, где это вызывает проблему, - это когда вы помещаете URL-адрес или URI в файл cookie. Допустим, я хочу поместить "/ foo" в файл cookie. EncodeURIComponent () дает мне неиспользуемый путь "% 2Ffoo", в то время как encodeURI () дает мне "/ foo", который напрямую используется любой серверной системой или кем-либо еще, использующим cookie без вашего плагина.

Преимущество encode () здесь на самом деле в том, что если у вас есть точка с запятой в значении вашего файла cookie, оно экранируется. encodeURI () не экранирует точку с запятой, поэтому вам придется добавить код для обработки этого поверх использования encodeURI ().

Raw в порядке, но я предполагаю, что вы добавили это, потому что у людей были проблемы с кодировкой. Если вы используете encodeURI (), то, вероятно, он вам больше не нужен.

Причина, по которой я не могу использовать encodeURI :

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

Но:

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

Последнее - это то поведение, которое мы хотим.

raw Фактически,

Мне любопытно, зачем вам такое поведение? Пытаясь найти ответ в другом месте http://stackoverflow.com/questions/5743119/why-use-encodeuricomponent-when-writing-json-to-a-cookie

Просто если кто-то еще найдет это обсуждение при поиске ответа, как я:

Файлы cookie передаются на сервер в виде HTTP-заголовка:

Cookie: имя1 = значение1; имя2 = значение2

Очевидно, что value1 не может содержать a;

Есть и другие проблемные персонажи.

Дело в том, что куки-файлы принципиально затруднены из-за отсутствия кодировки. Вы должны выбрать кодировку и использовать ее как в браузере, так и на сервере.

MDN рекомендует encodeURIComponent: https://developer.mozilla.org/en-US/docs/Web/API/document.cookie.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги