From 68111f57d1107058739953d29822ba3b7b6c142e Mon Sep 17 00:00:00 2001 From: Makis Maropoulos Date: Fri, 8 Jul 2016 21:33:41 +0200 Subject: [PATCH] Replace fasthttp's with correct remove cookie code... fixes flash messages and sessions on some cases --- context.go | 11 +++++++++-- context_test.go | 15 +++++++++++++-- 2 files changed, 22 insertions(+), 4 deletions(-) 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) {