как добавить данные в cookie - PullRequest
3 голосов
/ 20 января 2010

Я хочу добавить два значения в cookie и получить их. Я делаю так, но получаю только первое значение, а не второе.

Cookie c = new Cookie("a", a);
c.setMaxAge(60);
response.addCookie(c);

Cookie b = new Cookie("d", d);
b.setMaxAge(5 * 60);
response.addCookie(b);

При чтении:

Cookie cookies[] = getRequest().getCookies();
Cookie myCookie = null;
if (cookies != null) {      
    for (int i = 0; i < cookies.length; i++) {
        log.info("test ;;;"+cookies[i].getName());
    }
}

Возвращает только одни данные.

Ответы [ 4 ]

2 голосов
/ 20 января 2010

Вы, вероятно, читаете их из неправильного запроса. Недавно добавленные куки будут доступны только в последующих запросах, они не будут немедленно отражены в текущем запросе. Так, если вы, например, добавили в ответ файл cookie, а затем попытались прочитать его из текущего запроса (тот, который связан с тем же ответом, в который вы добавили файл cookie), вы не получите добавленный cookie на всех. Это также применяется, когда вы перенаправляете запрос от одного к другому ресурсу (то есть сервлету или JSP).

Отладка / чтение заголовков запроса / ответа на стороне клиента, а также ради этого. В FireFox вы можете использовать для этого Firebug (откройте панель Firebug, перейдите на вкладку Net , щелкните по соответствующему запросу, и вы увидите оба заголовка запроса / ответа, там тоже есть куки).

0 голосов
/ 20 января 2010

Я бы посмотрел на фактический файл cookie, сохраняемый в вашем браузере. Первое, что приходит на ум, это тот факт, что в базовом файле, в котором хранятся ваши данные cookie, фактически есть только один файл - объекты cookie в вашем коде фактически кодируются как пары имя-значение в одном файле. В статье http://www.quirksmode.org/js/cookies.html есть некоторые подробные сведения о том, как данные на самом деле хранятся в файле cookie. (На самом деле это больше, чем пары имя-значение, поскольку он также поддерживает другие свойства cookie, такие как дата истечения срока действия и защищенный флаг, но в любом случае статья покажет вам этот формат.)

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

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

0 голосов
/ 20 января 2010

Вы можете сделать что-то вроде этого, дорогой, я проверил это и работает

response.addCookie (новый Cookie («имя», «солнечный»)); response.addCookie (новый Cookie ("pwd", "sunnymehta"));

Cookie [] cookie = request.getCookies (); для (Cookie ck: cookie) { System.out.println (ck.getName ()); }

0 голосов
/ 20 января 2010

Я бы реализовал что-то вроде:

for(int i= 0; i < cookies.length; i++) { 
   Cookie cookie = cookies[i];
   log.info("name: "  + cookie.getName()) 
   log.info("value: " + cookie.getValue()) 
}

Это должно напечатать имя и значения куки. Если это не работает, возможно, файлы cookie неправильно добавлены в ответ. Убедитесь, что длина файлов cookie соответствует ожидаемой.

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