Проблема с удалением cookie в сервлете

Я пытаюсь удалить cookie в сервлете с помощью этого кода

Cookie minIdCookie = null;

for (Cookie c : req.getCookies()) {
    if (c.getName().equals("iPlanetDirectoryPro")) {
        minIdCookie = c;
        break;
    }
}

if (minIdCookie != null) {
    minIdCookie.setMaxAge(0);
    minIdCookie.setValue("");
    minIdCookie.setPath("/");
    res.addCookie(minIdCookie);
}

res.flushBuffer();

Но это не дает никакого эффекта и не меняет свойства cookie.

Я также пробовал добавить cookie в этот сервлет и в этот работает нормально.

Почему я не могу изменить свойства существующего файла cookie.

6
задан BalusC 12 August 2010 в 12:04
поделиться

2 ответа

Проблема заключалась в том, что файл cookie, который я хотел удалить, имел путь «/ admin», а мой сервлет выхода имел путь «/ admin / logoutServlet». Когда я получаю файл cookie из запроса, путь устанавливается равным нулю. Поэтому, когда я добавляю файл cookie, в качестве моего сервлета устанавливается путь "/ admin /". Если я создал файл cookie с путем "/ admin /", сервлет смог его удалить.

Я решил проблему, явно указав путь к файлу cookie перед добавлением его в ответ.

minIdCookie.setMaxAge(0);
minIdCookie.setPath("/");
res.addCookie(minIdCookie);

Но я не понимаю, почему путь нулевой.

0
ответ дан 8 December 2019 в 15:58
поделиться

Не следует изменять путь. Это приведет к изменению идентификатора cookie. Если cookie был установлен для пути /foo, а вы измените его на /, то клиент больше не будет ассоциировать измененный cookie с оригинальным cookie. Cookie идентифицируется по имени и пути.

Просто установить maxage на 0 должно быть достаточно.

Cookie[] cookies = request.getCookies();
if (cookies != null) { // Yes, this can return null! The for loop would otherwise throw NPE.
    for (Cookie cookie : cookies) {
        if (cookie.getName().equals("iPlanetDirectoryPro")) {
            cookie.setMaxAge(0);
            response.addCookie(cookie);
            break;
        }
    }
}

Вам также нужно убедиться, что вы читаете/тестируете cookie в последующем новом запросе, а не в текущем.

7
ответ дан 8 December 2019 в 15:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: