В сервлете Java, как я могу изменить значение существующего файла cookie? Существует метод addCookie, но нет deleteCookie или editCookie в HttpServletResponse
В сервлете Java, как я могу изменить значение существующего файла cookie?
Ответ 1
Таких действительно не существует. Просто создайте сами утилиты, которые это делают. В частности, получение желаемого печенья довольно раздуто. Например.
public final class Servlets {
private Servlets() {}
public static Cookie getCookie(HttpServletRequest request, String name) {
if (request.getCookies() != null) {
for (Cookie cookie : request.getCookies()) {
if (cookie.getName().equals(name)) {
return cookie;
}
}
}
return null;
}
}
Чтобы отредактировать файл cookie, установите его значение, а затем добавьте его в ответ:
Cookie cookie = Servlets.getCookie(request, "foo");
if (cookie != null) {
cookie.setValue(newValue);
response.addCookie(cookie);
}
Установите, если необходимо, maxage, путь и домен, если они отличаются от вашего значения по умолчанию. Клиент не отправляет эту информацию обратно.
Чтобы удалить файл cookie, установите максимальный возраст 0
(и предпочтительно также значение null
):
Cookie cookie = Servlets.getCookie(request, "foo");
if (cookie != null) {
cookie.setMaxAge(0);
cookie.setValue(null);
response.addCookie(cookie);
}
Установите, если необходимо, путь и домен, если они отличаются от вашего значения по умолчанию. Клиент не отправляет эту информацию обратно.
Ответ 2
Вот пример из kodejava:
public class ReadCookieExample extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter writer = response.getWriter();
Cookie[] cookies = request.getCookies();
for (int i = 0; i < cookies.length; i++) {
writer.println("Name: " + cookies[i].getName() + "; Value: " + cookies[i].getValue());
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
}
Это получит список файлов cookie, получите тот, который вы хотите, и вместо того, чтобы печатать значения, сделайте что-то похожее на это:
cookie.setValue(String.valueOf(<new Value>));
cookie.setMaxAge(60*60*24*365);
cookie.setPath("/");
response.addCookie(cookie); etc...
НТН,
Джеймс