在Java Servlet中,如何更改现有cookie的值?

在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); } 

必要时设置maxage,path和domain,如果它们与默认值不同。 客户端即不发送此信息。

要删除cookie,请将max age设置为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()); cookie.setMaxAge(60*60*24*365); cookie.setPath("/"); response.addCookie(cookie); etc... 

HTH,

詹姆士