Как удалить Cookie в Java-сервлете
Как удалить куки файл в сервлете Java?
Я пробовал это:
http://www.jguru.com/faq/view.jsp?EID=42225
EDIT: теперь это работает успешно, и это выглядит как комбинация:
response.setContentType("text/html");
и
cookie.setMaxAge(0);
До этого я делал:
//remove single signon cookie if it hasn't been validated yet
response.setContentType("text/html");
Cookie cookie = new Cookie(SSORealm.SSO_COOKIE_NAME, "");
cookie.setDomain(SSORealm.SSO_DOMAIN);
cookie.setMaxAge(-1);
cookie.setPath("/");
cookie.setComment("EXPIRING COOKIE at " + System.currentTimeMillis());
response.addCookie(cookie);
Срок действия файла cookie при закрытии браузера по документации.
Отрицательное значение означает, что файл cookie не сохраняется постоянно и будет удален при выходе из браузера. Нулевое значение приводит к удалению файла cookie.
Полный рабочий фрагмент для истечения срока действия файла cookie:
//remove single signon cookie if it hasn't been validated yet
response.setContentType("text/html");
Cookie cookie = new Cookie(SSORealm.SSO_COOKIE_NAME, "");
cookie.setDomain(SSORealm.SSO_DOMAIN);
cookie.setMaxAge(0);
cookie.setPath("/");
cookie.setComment("EXPIRING COOKIE at " + System.currentTimeMillis());
response.addCookie(cookie);
Ответы
Ответ 1
MaxAge of -1 сигнализирует, что вы хотите, чтобы файл cookie сохранялся в течение всего сеанса. Вы хотите установить MaxAge вместо 0.
Из документации API:
Отрицательное значение означает, что файл cookie не сохраняется постоянно и будет удален при выходе из браузера. Нулевое значение приводит к удалению файла cookie.
Ответ 2
В моей среде работает следующий код. Хотя на первый взгляд выглядит излишним, cookies[i].setValue("");
и cookies[i].setPath("/");
необходимы, чтобы очистить файл cookie.
private void eraseCookie(HttpServletRequest req, HttpServletResponse resp) {
Cookie[] cookies = req.getCookies();
if (cookies != null)
for (Cookie cookie : cookies) {
cookie.setValue("");
cookie.setPath("/");
cookie.setMaxAge(0);
resp.addCookie(cookie);
}
}
Ответ 3
Имейте в виду, что файл cookie на самом деле определяется кортежем имени, пути и домена. Если какой-либо из этих трех отличается или существует несколько файлов cookie с тем же именем, но определяется с помощью путей/доменов, которые все еще могут быть видимыми для рассматриваемого URL-адреса, вы все равно увидите, что cookie передан по запросу. Например. если URL-адрес " http://foo.bar.com/baz/index.html", вы увидите файлы cookie, определенные на bar.com или foo.bar.com, или с помощью путь "/" или "/baz".
Таким образом, то, что у вас похоже, должно работать, если на клиенте определен только один файл cookie с именем "SSO_COOKIE_NAME", домен "SSO_DOMAIN" и путь "/". Если есть файлы cookie с разными путями или доменами, вы все равно увидите cookie, отправленный клиенту.
Чтобы отладить это, перейдите в настройки Firefox → вкладка Безопасность и найдите все файлы cookie с SSO_COOKIE_NAME. Нажмите на каждый, чтобы увидеть домен и путь. Я готов поспорить, что вы найдете там, что не совсем то, что вы ожидаете.
Ответ 4
Это код, который я использовал ранее, передавая "/"
в качестве параметра strPath.
public static Cookie eraseCookie(String strCookieName, String strPath) {
Cookie cookie = new Cookie(strCookieName, "");
cookie.setMaxAge(0);
cookie.setPath(strPath);
return cookie;
}
Ответ 5
Cookie[] cookies = request.getCookies();
if(cookies!=null)
for (int i = 0; i < cookies.length; i++) {
cookies[i].setMaxAge(0);
}
Неужели это не сработало? Это удаляет все файлы cookie, если ответ отправлен обратно.