iris/_examples/intermediate/sessions/standalone/main.go
2017-06-08 14:39:55 +03:00

104 lines
3.1 KiB
Go

package main
import (
"time"
"github.com/kataras/iris"
"github.com/kataras/iris/context"
"github.com/kataras/iris/sessions"
)
type businessModel struct {
Name string
}
func main() {
app := iris.New()
// enable all (error) logs
// select the httprouter as the servemux
mySessions := sessions.New(sessions.Config{
// Cookie string, the session's client cookie name, for example: "mysessionid"
//
// Defaults to "irissessionid"
Cookie: "mysessionid",
// it's time.Duration, from the time cookie is created, how long it can be alive?
// 0 means no expire.
// -1 means expire when browser closes
// or set a value, like 2 hours:
Expires: time.Hour * 2,
// if you want to invalid cookies on different subdomains
// of the same host, then enable it
DisableSubdomainPersistence: false,
// want to be crazy safe? Take a look at the "securecookie" example folder.
})
app.AttachSessionManager(mySessions) // Attach the session manager we just created.
app.Get("/", func(ctx context.Context) {
ctx.Writef("You should navigate to the /set, /get, /delete, /clear,/destroy instead")
})
app.Get("/set", func(ctx context.Context) {
//set session values.
ctx.Session().Set("name", "iris")
//test if setted here
ctx.Writef("All ok session setted to: %s", ctx.Session().GetString("name"))
// Set will set the value as-it-is,
// if it's a slice or map
// you will be able to change it on .Get directly!
// Keep note that I don't recommend saving big data neither slices or maps on a session
// but if you really need it then use the `SetImmutable` instead of `Set`.
// Use `SetImmutable` consistently, it's slower.
// Read more about muttable and immutable go types: https://stackoverflow.com/a/8021081
})
app.Get("/get", func(ctx context.Context) {
// get a specific value, as string, if no found returns just an empty string
name := ctx.Session().GetString("name")
ctx.Writef("The name on the /set was: %s", name)
})
app.Get("/delete", func(ctx context.Context) {
// delete a specific key
ctx.Session().Delete("name")
})
app.Get("/clear", func(ctx context.Context) {
// removes all entries
ctx.Session().Clear()
})
app.Get("/destroy", func(ctx context.Context) {
//destroy, removes the entire session data and cookie
ctx.SessionDestroy()
})
// Note about Destroy:
//
// You can destroy a session outside of a handler too, using the:
// mySessions.DestroyByID
// mySessions.DestroyAll
app.Get("/immutable", func(ctx context.Context) {
business := []businessModel{{Name: "Edward"}, {Name: "value 2"}}
ctx.Session().SetImmutable("businessEdit", business)
businessGet := ctx.Session().Get("businessEdit").([]businessModel)
// businessGet[0].Name is equal to Edward initially
businessGet[0].Name = "Gabriel"
})
app.Get("/immutable_get", func(ctx context.Context) {
if ctx.Session().Get("businessEdit").([]businessModel)[0].Name == "Gabriel" {
panic("Report this as a bug, immutable data cannot be changed from the caller without re-SetImmutable")
}
// the name should remains "Edward"
})
app.Run(iris.Addr(":8080"))
}