使用java删除cookie

时间:2012-06-19 14:18:53

标签: java servlets cookies

我写了下一段代码:

public void delete(MyType instance) {
        List<MyType> myList = this.getAll();

        Cookie[] cookies = request.getCookies();
        List<Cookie> cookieList = new ArrayList<Cookie>();
        cookieList = Arrays.asList(cookies);
        for(Cookie cookie:cookieList) {
            if(Long.valueOf(cookie.getValue()) == instance.getId()) {
                cookieList.remove(cookie);
            }
        }
        myList.remove(instance);
        cookies = (Cookie[]) cookieList.toArray();
}

问题是下一个:当我从cookielist中删除cookie时,我如何将更新的cookielist(没有删除的cookie)放回客户端?请求或响应没有任何*.setCookies();方法。 或cookie会自动更新? 最好的问候。

1 个答案:

答案 0 :(得分:15)

您需要设置null值为0且最大年龄为cookie.setValue(null); cookie.setMaxAge(0); cookie.setPath(theSamePathAsYouUsedBeforeIfAny); response.addCookie(cookie); 的相同Cookie(以及相同的路径,如果您已设置自定义路径),请回复{{{ 3}}

==

对于具体问题

无关,你不需要将数组按到列表中然后再回来。增强的for循环适用于数组。此外,使用Long比较equals()值仅适用于-128到127之间的值。您需要public void delete(MyType instance) { Cookie[] cookies = request.getCookies(); if (cookies != null) { for (Cookie cookie : cookies) { if (Long.valueOf(cookie.getValue()).equals(instance.getId())) { cookie.setValue(null); cookie.setMaxAge(0); cookie.setPath(theSamePathAsYouUsedBeforeIfAny); response.addCookie(cookie); } } } } 。总而言之,该方法可能如下所示:

request

顺便说一下,看到response和{{1}}是某个类的实例变量是很可怕的。你确定特定的类是线程安全的吗?要了解servlet和线程安全,您可能会发现此答案很有用:HttpServletResponse#addCookie()