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

问题描述

我有一个网站,当用户登录时,它会创建一个访问令牌(存储在内存中)和一个刷新令牌(存储在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","",new Date(),true);
        return Response.ok().cookie(logoutCookie).header("Access-Control-Allow-Credentials",true).build();
    }

未设置第一个客户端时,此cookie甚至都不会保存到前端。我试图从设置了第一个cookie的子路径发送它,但是没有运气。我在这里缺少什么吗?这是错误方法吗?

解决方法

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

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