Сессия
Промежуточное ПО 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.
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 |
Ключевое значение, например ": ", для извлечения идентификатора сеанса из запроса |
"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 |
Генератор ключей сеанса | 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() // от github.com/gofiber/storage/sqlite3
store := session.New(session.Config{
Storage: storage,
})