Как удалить файл Cookie в сервлете Java
Как удалить файл cookie в сервлете 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);
6 ответов
максимальное значение -1 сигнализирует о том, что файл cookie должен сохраняться в течение всего сеанса. Вместо этого вы хотите установить MaxAge в 0.
Отрицательное значение означает, что файл cookie не сохраняется постоянно и будет удален при выходе из веб-браузера. Нулевое значение приводит к удалению файла cookie.
в моей среде работает следующий код. Хотя выглядит излишним на первый взгляд,cookies[i].setValue("");
и cookies[i].setPath("/");
не правильно куки.
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);
}
}
имейте в виду, что cookie фактически определяется кортежем его имени, пути и домена. Если какой-либо из этих трех отличается или существует несколько файлов cookie с тем же именем, но определенных с путями/доменами, которые все еще могут быть видны для рассматриваемого URL-адреса, вы все равно увидите, что файл cookie передан по запросу. Например. если url-адрес "http://foo.bar.com/baz/index.html", вы увидите любые куки, определенные на bar.com или foo.bar.com или с путем " / " или "/baz."
таким образом, то, что у вас есть, похоже, должно работать, пока в клиенте определен только один файл cookie с именем "SSO_COOKIE_NAME", домен "SSO_DOMAIN" и путь "/". Если есть какие-либо файлы cookie с другим путем или доменом, вы все равно увидите файл cookie, отправленный клиенту.
чтобы отладить это, перейдите на вкладку настройки Firefox - > безопасность и найдите все файлы cookie с именем SSO_COOKIE_NAME. Нажмите на каждый, чтобы увидеть домен и путь. Держу пари, что ты ... найди там кого-нибудь, кто не совсем то, что ты ожидаешь.
это код, который я эффективно использовал раньше, передает "/"
в качестве параметра strPath.
public static Cookie eraseCookie(String strCookieName, String strPath) {
Cookie cookie = new Cookie(strCookieName, "");
cookie.setMaxAge(0);
cookie.setPath(strPath);
return cookie;
}
Cookie[] cookies = request.getCookies();
if(cookies!=null)
for (int i = 0; i < cookies.length; i++) {
cookies[i].setMaxAge(0);
}
это не сработало? Это удаляет все cookies, если ответ отправляется обратно.
один особый случай: файл cookie не имеет пути.
в этом случае установить путь как cookie.setPath(request.getRequestURI())
javascript устанавливает cookie без пути, поэтому браузер показывает его как cookie только для текущей страницы. Если я попытаюсь отправить истекший cookie с path == /
браузер показывает два куки: один истек с path == /
и path == current page
.