2015-10-23 3 views
4

Недавно я играл с печеньем, и я заметил, что когда я создаю один со значением «Hello, World!», Я получаю «Привет»:Можете ли вы хранить запятые с пробелами внутри печенья?

document.cookie = "testCookie=Hello, World!;"; 

Интересно, что если я не» т добавить пробел в «Hello, World!», значение куки остается, как я установил его: («Hello, World!»)

document.cookie = "testCookie=Hello,World!;"; 

Моя только догадываться, почему это происходит потому, что запятая и space "," заканчивает куки, такие как точки с запятой и пробелы ";" do. Это так, или я делаю что-то неправильно?

+1

Вы хотите поставить кавычки вокруг строки '' testCookie = 'Hello, World!'; "' [У MDN есть фреймворк] (https://developer.mozilla.org/en-US/docs/Web/API/Document/cookie), который использует '.setCookie' и' .getCookie', чтобы избежать таких проблем :. –

+0

Если вы собираетесь взаимодействовать с необработанной строкой 'document.cookie', вам следует, вероятно, понять структуру немного лучше. –

+0

* Замечание * в моем последнем комментарии они должны быть '.getItem' и' .setItem', мой интернет разбился, поэтому я не смог его отредактировать. –

ответ

3

Вы должны использовать encodeURIComponent на значении в качестве MDN states:

Строковое значение печенья можно использовать encodeURIComponent(), чтобы гарантировать, что строка не содержит запятые, точки с запятой или пробелы (которые запрещены в печенье значения).

+0

Большое спасибо! Он работает отлично. Кроме того, стоит отметить, что для тех, кому это может понадобиться, я использовал 'decodeURIComponent' для более простого отображения значения cookie для пользователя. – Alexcamostyle

+0

Не похоже, что вы «должны» использовать 'encodeURIComponent', но вы« можете »его использовать. 'encodeURIComponent' также кодирует символы, которых он не должен, поэтому все зависит от вашего варианта использования. –

0

См. here для символов, разрешенных в файле cookie, а также de RFC 6265, если необходимо.

В значении печенья:
* Comma is not allowed
* Space is not allowed

Во имя печенья (клавиша)
* Comma is not allowed
* Space is not allowed

Заключение
Все символы, которые вы пытаетесь использовать в файлах cookie, не допускаются для каждой спецификации, поэтому вам нужно закодировать его, если вы хотите, чтобы он работал во всех браузерах, , иначе поведение не определено.

Рекомендация
Я рекомендую проект, который я и Клаус Hartl Поддерживайте под названием js-cookie, она раньше называлась jquery.cookie, он пытается документировать и понять все ограничения, связанные с браузером, чтобы обеспечить образец, исправить все эти проблемы. Он работает со всеми символами Юникода в браузере.