一架梯子,一头程序猿,仰望星空!
Go Fiber教程 > 内容正文

Go Fiber Session


Session

Session中间件用于Fiber框架,会话管理。

注意: 该中间件使用我们的Storage包通过一个统一的接口支持各种数据库。该中间件的默认配置将数据保存在内存中,有关其他数据库的示例,请参见下面的示例。

签名

func New(config ...Config) *Store
func (s *Store) RegisterType(i interface{})
func (s *Store) Get(c *fiber.Ctx) (*Session, error)
func (s *Store) Reset() error

func (s *Session) Get(key string) interface{}
func (s *Session) Set(key string, val interface{})
func (s *Session) Delete(key string)
func (s *Session) Destroy() error
func (s *Session) Regenerate() error
func (s *Session) Save() error
func (s *Session) Fresh() bool
func (s *Session) ID() string
func (s *Session) Keys() []string

注意: 存储“interface{}``值仅限于内置Go类型。

示例

导入Fiber Web框架的中间件包

import (
  "github.com/gofiber/fiber/v2"
  "github.com/gofiber/fiber/v2/middleware/session"
)

在初始化Fiber应用程序之后,您可以使用以下功能:

// 初始化默认配置
// 这将存储您应用程序的所有会话
store := session.New()

app.Get("/", func(c *fiber.Ctx) error {
    // 从存储中获取会话
    sess, err := store.Get(c)
    if err != nil {
        panic(err)
    }

    // 获取值
    name := sess.Get("name")

    // 设置键/值
    sess.Set("name", "john")

    // 获取所有键
    keys := sess.Keys()

    // 删除键
    sess.Delete("name")

    // 销毁会话
    if err := sess.Destroy(); err != nil {
        panic(err)
    }

    // 为此会话设置特定的到期时间
    sess.SetExpiry(time.Second * 2)

    // 保存会话
    if err := sess.Save(); err != nil {
        panic(err)
    }

    return c.SendString(fmt.Sprintf("欢迎 %v", name))
})

配置

属性 类型 描述 默认值
Expiration time.Duration 允许的会话持续时间 24 * time.Hour
Storage fiber.Storage 存储接口以存储会话数据 memory.New()
KeyLookup string KeyLookup是一个形如”:“的字符串,用于从请求中提取会话ID "cookie:session_id"
CookieDomain string cookie的域 ""
CookiePath string cookie的路径 ""
CookieSecure bool cookie是否安全 false
CookieHTTPOnly bool cookie是否仅限HTTP false
CookieSameSite string SameSite cookie的值 "Lax"
CookieSessionOnly bool 决定cookie是否仅在浏览器会话中有效。如果设置为true,则忽略Expiration的值 false
KeyGenerator func() string KeyGenerator生成会话密钥 utils.UUIDv4
CookieName (已弃用) string 已弃用:请使用KeyLookup。会话名称 ""

默认配置

var ConfigDefault = Config{
    Expiration:   24 * time.Hour,
    KeyLookup:    "cookie:session_id",
    KeyGenerator: utils.UUIDv4,
    source:       "cookie",
    sessionName:  "session_id",
}

常量

const (
    SourceCookie   Source = "cookie"
    SourceHeader   Source = "header"
    SourceURLQuery Source = "query"
)

自定义存储/数据库

您可以使用我们的storage包中的任何存储。

storage := sqlite3.New() // From github.com/gofiber/storage/sqlite3
store := session.New(session.Config{
    Storage: storage,
})