如何在客户端上删除HttpOnly Cookie?

时间:2020-11-09 07:09:38

标签: java reactjs cookies jax-rs cookie-httponly

我有一个网站,当用户登录时,它会创建一个访问令牌(存储在内存中)和一个刷新令牌(存储在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的子路径发送它,但是没有运气。我在这里缺少什么吗?这是错误的方法吗?

1 个答案:

答案 0 :(得分:0)

您所说的是您正在使用httpOnly cookie,因此您必须了解一件事,即从客户端不会实现该目标,因为那样的话,那将使拥有httpOnly cookie的目的不如以前与拥有常规Cookie相同。

  • 因此,现在您的解决方案是在您的后端上,当用户注销时摆脱Cookie的解决方案是您要删除该特定Cookie的后端。