我有一个网站,当用户登录时,它会创建一个访问令牌(存储在内存中)和一个刷新令牌(存储在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,假设它会覆盖第一个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的子路径发送它,但是没有运气。我在这里缺少什么吗?这是错误的方法吗?
答案 0 :(得分:0)
您所说的是您正在使用httpOnly cookie,因此您必须了解一件事,即从客户端不会实现该目标,因为那样的话,那将使拥有httpOnly cookie的目的不如以前与拥有常规Cookie相同。