在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,
詹姆士