diff --git a/context.go b/context.go index 6721c5a7..21bf8188 100644 --- a/context.go +++ b/context.go @@ -744,8 +744,15 @@ func (ctx *Context) SetCookieKV(key, value string) { // RemoveCookie deletes a cookie by it's name/key func (ctx *Context) RemoveCookie(name string) { - ctx.RequestCtx.Request.Header.DelCookie(name) - ctx.RequestCtx.Response.Header.DelClientCookie(name) + cookie := fasthttp.AcquireCookie() + cookie.SetKey(name) + cookie.SetValue("") + cookie.SetPath("/") + cookie.SetHTTPOnly(true) + exp := time.Now().Add(-time.Duration(1) * time.Minute) //RFC says 1 second, but make sure 1 minute because we are using fasthttp + cookie.SetExpire(exp) + ctx.Response.Header.SetCookie(cookie) + fasthttp.ReleaseCookie(cookie) } // GetFlashes returns all the flash messages for available for this request diff --git a/context_test.go b/context_test.go index a3501408..0ae12964 100644 --- a/context_test.go +++ b/context_test.go @@ -427,8 +427,13 @@ func TestContextFlashMessages(t *testing.T) { // get the first flash, the next should be avaiable to the next requess Get("/get_first_flash", func(ctx *Context) { for _, v := range values { - val, _ := ctx.GetFlash(v.Key) - ctx.JSON(StatusOK, map[string]string{v.Key: val}) + val, err := ctx.GetFlash(v.Key) + if err == nil { + ctx.JSON(StatusOK, map[string]string{v.Key: val}) + } else { + ctx.JSON(StatusOK, nil) // return nil + } + break } @@ -516,6 +521,12 @@ func TestContextFlashMessages(t *testing.T) { g.JSON().Null() g.Cookies().Empty() + // test Get, and get again should return nothing + e.PUT("/set").Expect().Status(StatusOK).Cookies().NotEmpty() + e.GET("/get_first_flash").Expect().Status(StatusOK).JSON().Object().ContainsKey(firstKey).NotContainsKey(lastKey) + g = e.GET("/get_first_flash").Expect().Status(StatusOK) + g.JSON().Null() + g.Cookies().Empty() } func TestContextSessions(t *testing.T) {