簡體   English   中英

如何刪除客戶端上的 HttpOnly Cookie?

[英]How do I delete a HttpOnly Cookie on the client?

我有一個網站,當用戶登錄時,它會創建一個存儲在內存中的訪問令牌和一個存儲在 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 的子路徑發送它,但沒有運氣。 有什么我在這里想念的嗎? 這是錯誤的做法嗎?

從你所說的是你正在使用 httpOnly cookie,所以你必須明白一件事是,從客戶端你不會實現這一點,因為那樣會破壞擁有 httpOnly cookie 的目的,而不是那樣就像有一個普通的餅干。

  • 因此,現在您在用戶注銷時擺脫 cookie 的解決方案是在您的后端,我相信 cookie 是在您想要刪除該特定 cookie 的地方制作的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM