Database

有时你需要一个后端存储, 例如Redis,它将会在服务重启或者水平扩展的时候保存会话数据。

通过简单调用 sessions.UseDatabase(database) 注册一个会话数据库。

Iris 实现3中内建的会话数据库,分别为 redisbadgerboltdb。这些会话数据库在 iris/sessions/sessiondb 子包中实现,你可以导入它们。

  • 导入:gitbub.com/kataras/iris/sessions/sessiondb/redis or boltdb or badger
  • 实例化数据库
  • 注册它们

示例:

  • Redis
  1. import (
  2. "github.com/kataras/iris/v12"
  3. "github.com/kataras/iris/v12/sessions"
  4. // 1. Import the session database.
  5. "github.com/kataras/iris/v12/sessions/sessiondb/redis"
  6. )
  7. // 2. Initialize the database.
  8. // These are the default values,
  9. // you can replace them based on your running redis' server settings:
  10. db := redis.New(redis.Config{
  11. Network: "tcp",
  12. Addr: "127.0.0.1:6379",
  13. Timeout: time.Duration(30) * time.Second,
  14. MaxActive: 10,
  15. Password: "",
  16. Database: "",
  17. Prefix: "",
  18. Delim: "-",
  19. Driver: redis.Redigo(), // redis.Radix() can be used instead.
  20. })
  21. // Optionally configure the underline driver:
  22. // driver := redis.Redigo()
  23. // driver.MaxIdle = ...
  24. // driver.IdleTimeout = ...
  25. // driver.Wait = ...
  26. // redis.Config {Driver: driver}
  27. // Close connection when control+C/cmd+C
  28. iris.RegisterOnInterrupt(func() {
  29. db.Close()
  30. })
  31. sess := sessions.New(sessions.Config{
  32. Cookie: "sessionscookieid",
  33. AllowReclaim: true,
  34. })
  35. // 3. Register it.
  36. sess.UseDatabase(db)
  37. // [...]
  • boltdb
  1. import "os"
  2. import "github.com/kataras/iris/v12/sessions/sessiondb/boltdb"
  3. db, err := boltdb.New("./sessions.db", os.FileMode(0750))
  • badger
  1. import "github.com/kataras/iris/v12/sessions/sessiondb/badger"
  2. db, err := badger.New("./data")

即时消息(Flash Messages)

有时你需要在同一个用户的两个请求间暂时存储数据,例如在提交表单后的错误或者成功消息。Iris 的 sessions 包支持存储暂时的信息。

正如我们所见的“会话”一章,您可以像这样初始化会话:

  1. import "github.com/kataras/iris/v12/sessions"
  2. sess := sessions.New(sessions.Config{Cookie: "cookieName", ...})
  3. app.Get("/path", func(ctx iris.Context) {
  4. session := sess.Start(ctx)
  5. // [...]
  6. })

Session 包含以下的方法来存储,取回,删除即时消息。

  1. SetFlash(key string, value interface{})
  2. HasFlash() bool
  3. GetFlashes() map[string]interface{}
  4. PeekFlash(key string) interface{}
  5. GetFlash(key string) interface{}
  6. GetFlashString(key string) string
  7. GetFlashStringDefault(key string, defaultValue string) string
  8. DeleteFlash(key string)
  9. ClearFlashes()

方法的作用就如方法名字描述的一样。例如,如果你需要获取并删除一个消息,你可以在下一个请求中使用 GetFlash。当你只需要获取,但是不想移除消息,你可以使用 PeekFlash

即时消息不会存储到数据库中。