我有一个网站,当用户登录时,它会创建一个存储在内存中的访问令牌和一个存储在 HttpOnly cookie 中的刷新令牌。当用户注销时,我想删除 HttpOnly cookie。但是,由于它是 HttpOnly,我无法使用 JavaScript 执行此操作,因此我的计划是从过期的服务器发送另一个 cookie 并覆盖有效的 cookie。不幸的是,由于某种原因,这不起作用。
这就是我首先创建cookie的方式:
String refreshToken = issueRefreshToken(username);
long currentDate = Calendar.getInstance().getTimeInMillis();
Date expDate = new Date(currentDate + 60 * 24 * 7 * ONE_MINUTE_IN_MILLIS);
NewCookie newCookie = new NewCookie("RefreshCookie",
refreshToken,
"/",
null,
NewCookie.DEFAULT_VERSION,
"Comment",
60 * 60 * 24 * 7,
expDate,
false,
true);
// Return the token on the response
return Response.ok(accessToken).cookie(newCookie).header("Access-Control-Allow-Credentials", true).build();
这会按预期工作并创建一个有效期为一周的刷新 cookie。
我有另一个端点 (/logout) 创建另一个 cookie,假设它会覆盖第一个。
@POST
public Response logout(){
NewCookie logoutCookie = new NewCookie(
"RefreshCookie",
null,
"/",
null,
NewCookie.DEFAULT_VERSION,
"",
0,
new Date(),
false,
true);
return Response.ok().cookie(logoutCookie).header("Access-Control-Allow-Credentials", true).build();
}
当第一个客户端未设置时,此 cookie 甚至不会保存到前端。我试图从设置第一个 cookie 的子路径发送它,但没有运气。有什么我在这里想念的吗?这是错误的方法吗?