【发布时间】:2011-11-18 20:02:26
【问题描述】:
在 Java Servlet 中,如何更改现有 cookie 的值?有addCookie方法,但是HttpServletResponse中没有deleteCookie和editCookie
【问题讨论】:
在 Java Servlet 中,如何更改现有 cookie 的值?有addCookie方法,但是HttpServletResponse中没有deleteCookie和editCookie
【问题讨论】:
那些确实不存在。只需自己创建实用方法即可。特别是获得所需的 cookie 非常臃肿。例如
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);
}
如有必要,设置最大值、路径和域,如果它们与您的默认值不同。客户端即不发回此信息。
要删除 cookie,请将最大年龄设置为 0(最好将值设置为 null):
Cookie cookie = Servlets.getCookie(request, "foo");
if (cookie != null) {
cookie.setMaxAge(0);
cookie.setValue(null);
response.addCookie(cookie);
}
必要时设置路径和域,如果它们与您的默认值不同。客户端即不发回此信息。
【讨论】:
这是一个来自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...
HTH,
詹姆斯
【讨论】: