Невозможно получить значение из cookie в Java. Значение содержит запятые. - PullRequest
6 голосов
/ 09 февраля 2010

У меня проблема с получением значения из файла cookie, который содержит запятые. Возвращает не полную строку, а строку, обрезанную до первой запятой. Например:

// cookie value = var1,var2,var3
String cookieVal = cookie.getValue();
//cookieVal now is "var1" instead of "var1,var2,var3"

и

// cookie value = var1=var2=var3
String cookieVal = cookie.getValue();
//cookieVal now is "var1=var2=var3"

Что я делаю не так.

Ответы [ 3 ]

5 голосов
/ 09 февраля 2010

Взгляните на документацию Cookie . Там написано:

Этот класс поддерживает обе версии 0 (от Netscape) и Версия 1 (от RFC 2109) технические характеристики печенья. От по умолчанию куки создаются с использованием Версия 0, чтобы обеспечить лучшее совместимость.

И если вы увидите setValue метод, вы найдете этот

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

РЕДАКТИРОВАТЬ: Просто прочитайте Google вещь. Может быть, попробуйте установить версию на 1 и посмотреть, как она работает.

2 голосов
/ 09 февраля 2010

Запятая является частью определения значения http-заголовка, поэтому запрограммируйте URL-запятые в вашем значении cookie .

URLEncoder.encode(cookieValue);

Я нашел это:

"Эта строка [значение cookie] представляет собой последовательность символов, исключая точка с запятой, запятая и пробел. Если есть необходимость разместить такой данные в имени или значении, некоторые методы кодирования, такие как стиль URL% XX рекомендуется кодировка, хотя кодировка не определена или требуется "

RFC говорит:

Неформально заголовок ответа Set-Cookie содержит токен Set- Cookie:, за которым следует разделенный запятыми список из одного или нескольких файлов cookie. Каждый файл cookie начинается с пары ИМЯ = ЗНАЧЕНИЕ, за которой следует ноль или более Разделенные точкой с запятой пары атрибут-значение.

Обновление: После того, как вы пояснили, что вы анализируете файл cookie от Google: я просмотрел все свои файлы cookie __utmX и ни один из них не содержит запятых. Разделитель здесь | или URL-кодированный :

0 голосов
/ 09 февраля 2010

Вы уверены, что вам нужно сохранить набор в куки? ИМХО куки не должны использоваться для хранения данных отдельно от идентификаторов. Хранение данных должно осуществляться на стороне сервера, когда это возможно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...