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+C
iris.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() bool
GetFlashes() map[string]interface{}
PeekFlash(key string) interface{}
GetFlash(key string) interface{}
GetFlashString(key string) string
GetFlashStringDefault(key string, defaultValue string) string
DeleteFlash(key string)
ClearFlashes()
方法的作用就如方法名字描述的一样。例如,如果你需要获取并删除一个消息,你可以在下一个请求中使用 GetFlash
。当你只需要获取,但是不想移除消息,你可以使用 PeekFlash
。
即时消息不会存储到数据库中。