在 Java Servlet 中,如何更改现有 cookie 的值?
Posted
技术标签:
【中文标题】在 Java Servlet 中,如何更改现有 cookie 的值?【英文标题】:In a Java Servlet how can I change the value of an existing cookie? 【发布时间】:2011-11-18 20:02:26 【问题描述】:有addCookie方法,但是HttpServletResponse中没有deleteCookie和editCookie
【问题讨论】:
【参考方案1】:那些确实不存在。只需自己创建实用方法即可。特别是获得所需的 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);
必要时设置路径和域,如果它们与您的默认值不同。客户端即不发回此信息。
【讨论】:
如果你得到了cookie,设置它,然后再得到它,你得到的是旧cookie还是新cookie? @Sam:在同一个请求中,您当然会得到旧请求。设置的 cookie 仅在后续请求中可用,因为此信息是通过 HTTP 标头传递的。 @BalusC 你知道以这种方式设置 cookie 值是否适用于重定向?似乎更改被忽略了,或者更确切地说,没有在 cookie 的标头表示上传播。在我的例子中,cookie 在重定向的接收端保持不变。欣赏任何想法。 鉴于我上面的评论/问题,我认为答案是通过重定向接收方的过滤器来管理 cookie。即,在过滤器中的 cookie 命中目标 jsp 之前将其移除(使用 HttpServletRequestWrapper 来操作 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...
HTH,
詹姆斯
【讨论】:
以上是关于在 Java Servlet 中,如何更改现有 cookie 的值?的主要内容,如果未能解决你的问题,请参考以下文章