From e05582b8e0559c330c029ab38f3e129dc3bc2fb4 Mon Sep 17 00:00:00 2001 From: LeanDeR <34670582+auxpd@users.noreply.github.com> Date: Fri, 12 May 2023 07:01:57 +0800 Subject: [PATCH] fix(context.CookieAllowReclaim): Fix the issue with the context.CookieAllowReclaim method not working as expected when deleting cookies (#2136) When deleting cookies, if the cookie is the first element and there is no semicolon before the string, it prevents the matching of this cookie. Closes #2134 --- context/context.go | 26 +++++--------------------- 1 file changed, 5 insertions(+), 21 deletions(-) diff --git a/context/context.go b/context/context.go index 7492e008..626a89b6 100644 --- a/context/context.go +++ b/context/context.go @@ -5518,29 +5518,13 @@ func CookieAllowReclaim(cookieNames ...string) CookieOption { // perform upsert on request cookies or is it too much and not worth the cost? ctx.Request().AddCookie(c) case OpCookieDel: - header := ctx.Request().Header - - if cookiesLine := header.Get("Cookie"); cookiesLine != "" { - if cookies := strings.Split(cookiesLine, "; "); len(cookies) > 1 { - // more than one cookie here. - // select that one and remove it. - name := sanitizeCookieName(c.Name) - - for _, nameValue := range cookies { - if strings.HasPrefix(nameValue, name) { - cookiesLine = strings.Replace(cookiesLine, "; "+nameValue, "", 1) - // current cookiesLine: myapp_session_id=5ccf4e89-8d0e-4ed6-9f4c-6746d7c5e2ee; key1=value1 - // found nameValue: key1=value1 - // new cookiesLine: myapp_session_id=5ccf4e89-8d0e-4ed6-9f4c-6746d7c5e2ee - header.Set("Cookie", cookiesLine) - break - } - } - return + cookies := ctx.Request().Cookies() + ctx.Request().Header.Del("Cookie") + for i, v := range cookies { + if v.Name != c.Name { + ctx.Request().AddCookie(cookies[i]) } } - - header.Del("Cookie") } } }