我写了下一段代码:
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会自动更新?
最好的问候。
答案 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()
。