mirror of
https://github.com/kataras/iris.git
synced 2025-01-23 18:51:03 +01:00
221f026491
Former-commit-id: f1d5cfc88a33077a9359eaa25b6a20265f5632b5
77 lines
2.0 KiB
Go
77 lines
2.0 KiB
Go
package main
|
|
|
|
import (
|
|
"github.com/kataras/iris/v12"
|
|
)
|
|
|
|
func main() {
|
|
app := newApp()
|
|
|
|
// http://localhost:8080/set/name1/value1
|
|
// http://localhost:8080/get/name1
|
|
// http://localhost:8080/remove/name1
|
|
app.Listen(":8080", iris.WithLogLevel("debug"))
|
|
}
|
|
|
|
func newApp() *iris.Application {
|
|
app := iris.New()
|
|
app.Use(withCookieOptions)
|
|
|
|
app.Get("/set/{name}/{value}", setCookie)
|
|
app.Get("/get/{name}", getCookie)
|
|
app.Get("/remove/{name}", removeCookie)
|
|
|
|
return app
|
|
}
|
|
|
|
func withCookieOptions(ctx iris.Context) {
|
|
// Register cookie options for request-lifecycle.
|
|
// To register per cookie, just add the CookieOption
|
|
// on the last variadic input argument of
|
|
// SetCookie, SetCookieKV, UpsertCookie, RemoveCookie
|
|
// and GetCookie Context methods.
|
|
//
|
|
// * CookieAllowReclaim
|
|
// * CookieAllowSubdomains
|
|
// * CookieSecure
|
|
// * CookieHTTPOnly
|
|
// * CookieSameSite
|
|
// * CookiePath
|
|
// * CookieCleanPath
|
|
// * CookieExpires
|
|
// * CookieEncoding
|
|
ctx.AddCookieOptions(iris.CookieAllowReclaim())
|
|
ctx.Next()
|
|
}
|
|
|
|
func setCookie(ctx iris.Context) {
|
|
name := ctx.Params().Get("name")
|
|
value := ctx.Params().Get("value")
|
|
|
|
ctx.SetCookieKV(name, value)
|
|
|
|
// By-default net/http does not remove or set the Cookie on the Request object.
|
|
//
|
|
// With the `CookieAllowReclaim` option, whenever you set or remove a cookie
|
|
// it will be also reflected in the Request object immediately (of the same request lifecycle)
|
|
// therefore, any of the next handlers in the chain are not holding the old value.
|
|
valueIsAvailableInRequestObject := ctx.GetCookie(name)
|
|
ctx.Writef("cookie %s=%s", name, valueIsAvailableInRequestObject)
|
|
}
|
|
|
|
func getCookie(ctx iris.Context) {
|
|
name := ctx.Params().Get("name")
|
|
|
|
value := ctx.GetCookie(name)
|
|
ctx.WriteString(value)
|
|
}
|
|
|
|
func removeCookie(ctx iris.Context) {
|
|
name := ctx.Params().Get("name")
|
|
|
|
ctx.RemoveCookie(name)
|
|
|
|
removedFromRequestObject := ctx.GetCookie(name) // CookieAllowReclaim feature.
|
|
ctx.Writef("cookie %s removed, value should be empty=%s", name, removedFromRequestObject)
|
|
}
|