Java 如何在客户端上删除HttpOnly Cookie?
我有一个网站,当用户登录时,它会创建一个存储在内存中的访问令牌和一个存储在HttpOnly cookie中的刷新令牌。当用户注销时,我想删除HttpOnly cookie。但是,由于它是HttpOnly,我无法使用JavaScript执行此操作,因此我的计划是从服务器发送另一个过期的cookie,并覆盖有效的cookie。不幸的是,由于某些原因,这不起作用 这是我首先创建cookie的方式:Java 如何在客户端上删除HttpOnly Cookie?,java,reactjs,cookies,jax-rs,cookie-httponly,Java,Reactjs,Cookies,Jax Rs,Cookie Httponly,我有一个网站,当用户登录时,它会创建一个存储在内存中的访问令牌和一个存储在HttpOnly cookie中的刷新令牌。当用户注销时,我想删除HttpOnly cookie。但是,由于它是HttpOnly,我无法使用JavaScript执行此操作,因此我的计划是从服务器发送另一个过期的cookie,并覆盖有效的cookie。不幸的是,由于某些原因,这不起作用 这是我首先创建cookie的方式: String refreshToken = issueRefreshToken(username);
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将覆盖第一个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的子路径发送它,但运气不佳。这里有我遗漏的东西吗?这是一种错误的做法吗?根据您的说法,您使用的是httpOnly cookie,因此您必须了解,从客户端来看,您无法实现这一点,因为这样做会破坏使用httpOnly cookie的目的,而不是与使用常规cookie一样
- 因此,现在,当用户注销时,您的解决方案是在您的后端删除cookie,我相信制作cookie的地方就是您希望删除特定cookie的地方
- 因此,现在,当用户注销时,您的解决方案是在您的后端删除cookie,我相信制作cookie的地方就是您希望删除特定cookie的地方