【发布时间】: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