gpt4 book ai didi

java - 使用java删除cookie

转载 作者:搜寻专家 更新时间:2023-10-31 08:15:33 45 4
gpt4 key购买 nike

我写了下一段代码:

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(); 方法。或者 cookies 会自动更新?最好的问候。

最佳答案

您需要使用 null 值和最大年龄 0 设置完全相同的 cookie(以及相同的路径,如果您设置了自定义路径)关于 HttpServletResponse#addCookie() 的回应.

cookie.setValue(null);
cookie.setMaxAge(0);
cookie.setPath(theSamePathAsYouUsedBeforeIfAny);
response.addCookie(cookie);

与具体问题无关,您根本不需要将数组移动到列表并返回。增强的 for 循环同样适用于数组。此外,使用 == 比较 Long 值仅适用于 -128 和 127 之间的值。您需要使用 equals()。所以总而言之,该方法可能如下所示:

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

顺便说一下,看到requestresponse 是某个类的实例变量是很可怕的。您确定特定类是线程安全的吗?要了解 servlet 和线程安全,您可能会发现此答案很有帮助:How do servlets work? Instantiation, sessions, shared variables and multithreading .

关于java - 使用java删除cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11102960/

45 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com