【问题标题】:Delete Cookie Spring Boot删除 Cookie Spring Boot
【发布时间】:2021-06-17 07:33:22
【问题描述】:

我在登录时在 cookie 中传递了一些信息,我需要在注销时删除这些信息。为了传递和删除 cookie,我使用的是 HttpServletResponse。 cookie 在客户端可见,但不会被删除。
添加cookie:

Cookie cookie = new Cookie(name, value);
cookie.setHttpOnly(true);
cookie.setSecure(false);
cookie.setMaxAge(age);
cookie.setPath("/"); 
cookie.setDomain("localhost");
response.addCookie(cookie);

删除:

Cookie cookie = new Cookie(name, null);
cookie.setHttpOnly(true);
cookie.setSecure(false);
cookie.setMaxAge(0);
cookie.setPath("/");
cookie.setDomain("localhost");
response.addCookie(cookie);

传递的名称是相同的,我对两者都使用了一个常量变量,所以这不是问题。我读了很多问题,但所有问题都用 setMaxAge 解决了 0,在我的情况下设置正确。我不知道该怎么办。

【问题讨论】:

  • cookies 是基于客户端的数据,因此您不能销毁它们(或者至少它没有用,因为用户可以修改它)。您可以做的是检查 cookie 数据,其中可能包含验证用户的字符串。当用户注销时,使数据检查无效,以便它的行为与 cookie 无效
  • @R.LM 实际上,服务器可以告诉浏览器他需要删除 cookie。我猜这就是 OP 想要实现的目标。
  • 据我所见,这里的事情是覆盖 cookie 数据,但仍然可能永远不会信任 cookie 数据。
  • @MatheusCirillo 客户端可能会选择不删除 cookie。最佳做法是使 cookie 无效,即将其值设置为,例如,一个空字符串。
  • 是的,我正在尝试将其设置为默认值,例如 null 或空字符串,这就是我想要实现的目标。

标签: java spring spring-boot servlets cookies


【解决方案1】:

所以我找到了一个解决方案,我想在这里发布它以帮助其他有需要的开发人员。

问题不在于我的后端,cookie 设置正确并按照文档中的说明删除。但事实是 cookie 是从不需要身份验证的端点设置的,我试图从需要身份验证的端点删除它。

您可以推断,问题出在我的前端和 cors 请求上。我必须添加一个拦截器,为每个请求添加 {withCredentials: true},它可以发送和接受来自服务器的 cookie。

intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
req = req.clone({
  withCredentials: true
});
return next.handle(req);
}

谢谢!

【讨论】:

    猜你喜欢
    • 2021-11-05
    • 2018-09-22
    • 2020-05-21
    • 2015-10-25
    • 2020-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-26
    相关资源
    最近更新 更多