Database
有时你需要一个后端存储, 例如Redis,它将会在服务重启或者水平扩展的时候保存会话数据。
通过简单调用 sessions.UseDatabase(database) 注册一个会话数据库。
Iris 实现3中内建的会话数据库,分别为 redis,badger,boltdb。这些会话数据库在 iris/sessions/sessiondb 子包中实现,你可以导入它们。
- 导入:
gitbub.com/kataras/iris/sessions/sessiondb/redis or boltdb or badger - 实例化数据库
- 注册它们
示例:
- Redis
import ("github.com/kataras/iris/v12""github.com/kataras/iris/v12/sessions"// 1. Import the session database."github.com/kataras/iris/v12/sessions/sessiondb/redis")// 2. Initialize the database.// These are the default values,// you can replace them based on your running redis' server settings:db := redis.New(redis.Config{Network: "tcp",Addr: "127.0.0.1:6379",Timeout: time.Duration(30) * time.Second,MaxActive: 10,Password: "",Database: "",Prefix: "",Delim: "-",Driver: redis.Redigo(), // redis.Radix() can be used instead.})// Optionally configure the underline driver:// driver := redis.Redigo()// driver.MaxIdle = ...// driver.IdleTimeout = ...// driver.Wait = ...// redis.Config {Driver: driver}// Close connection when control+C/cmd+Ciris.RegisterOnInterrupt(func() {db.Close()})sess := sessions.New(sessions.Config{Cookie: "sessionscookieid",AllowReclaim: true,})// 3. Register it.sess.UseDatabase(db)// [...]
- boltdb
import "os"import "github.com/kataras/iris/v12/sessions/sessiondb/boltdb"db, err := boltdb.New("./sessions.db", os.FileMode(0750))
- badger
import "github.com/kataras/iris/v12/sessions/sessiondb/badger"db, err := badger.New("./data")
即时消息(Flash Messages)
有时你需要在同一个用户的两个请求间暂时存储数据,例如在提交表单后的错误或者成功消息。Iris 的 sessions 包支持存储暂时的信息。
正如我们所见的“会话”一章,您可以像这样初始化会话:
import "github.com/kataras/iris/v12/sessions"sess := sessions.New(sessions.Config{Cookie: "cookieName", ...})app.Get("/path", func(ctx iris.Context) {session := sess.Start(ctx)// [...]})
Session 包含以下的方法来存储,取回,删除即时消息。
SetFlash(key string, value interface{})HasFlash() boolGetFlashes() map[string]interface{}PeekFlash(key string) interface{}GetFlash(key string) interface{}GetFlashString(key string) stringGetFlashStringDefault(key string, defaultValue string) stringDeleteFlash(key string)ClearFlashes()
方法的作用就如方法名字描述的一样。例如,如果你需要获取并删除一个消息,你可以在下一个请求中使用 GetFlash。当你只需要获取,但是不想移除消息,你可以使用 PeekFlash。
即时消息不会存储到数据库中。
