Session
Kirish
Seans sizga bir nechta so‘rovlar bo‘yicha foydalanuvchi ma’lumotlarini saqlash imkonini beradi, bu esa tabiatan stateless HTTP protokolida holatli tajribani ta’minlaydi. Ushbu foydalanuvchi ma’lumotlari server tomonida doimiy ravishda saqlanadi. Goravel turli doimiy saqlash haydovchilari bilan o‘zaro aloqada bo‘lish uchun birlashtirilgan interfeysni taklif qiladi.
Konfiguratsiya
session konfiguratsiya fayli config/session.go manzilida joylashgan. Standart haydovchi file bo‘lib, seanslarni storage/framework/sessions katalogida saqlaydi. Goravel sizga contracts/session/driver interfeysini amalga oshirish orqali maxsus session haydovchisini yaratish imkonini beradi.
Middleware-ni ro‘yxatdan o‘tkazish
Standart bo‘yicha, Goravel seansni avtomatik ravishda boshlab bermaydi. Biroq, u seansni boshlash uchun middleware-ni taqdim etadi. Siz middleware-ni bootstrap/app.go faylidagi WithMiddleware funksiyasida ro‘yxatdan o‘tkazishingiz yoki uni ma’lum yo‘nalishlarga qo‘shishingiz mumkin:
func Boot() contractsfoundation.Application {
return foundation.Setup().
WithMiddleware(func(handler configuration.Middleware) {
handler.Append(
middleware.StartSession(),
)
}).
WithConfig(config.Boot).
Create()
}Seans bilan ishlash
Ma’lumotlarni olish
Seansdan ma’lumotlarni olish uchun Get usulidan foydalanishingiz mumkin. Agar qiymat mavjud bo‘lmasa, nil qaytariladi.
value := ctx.Request().Session().Get("key")Shuningdek, siz Get usulining ikkinchi argumenti sifatida standart qiymatni ham o‘tkazishingiz mumkin. Agar belgilangan kalit seansda mavjud bo‘lmasa, bu qiymat qaytariladi:
value := ctx.Request().Session().Get("key", "default")Barcha ma’lumotlarni olish
Agar siz seansdan barcha ma’lumotlarni olishni istasangiz, All usulidan foydalanishingiz mumkin:
data := ctx.Request().Session().All()Ma’lumotlarning kichik to‘plamini olish
Agar siz seans ma’lumotlarining kichik to‘plamini olishni istasangiz, Only usulidan foydalanishingiz mumkin:
data := ctx.Request().Session().Only([]string{"username", "email"})Elementning seansda mavjudligini aniqlash
Elementning seansda mavjudligini aniqlash uchun Has usulidan foydalanishingiz mumkin. Has usuli element mavjud va nil bo‘lmasa, true qaytaradi:
if ctx.Request().Session().Has("user") {
//
}Element mavjud va hatto nil bo‘lsa ham, mavjudligini aniqlash uchun Exists usulidan foydalanishingiz mumkin:
if ctx.Request().Session().Exists("user") {
//
}Elementning seansda mavjud emasligini aniqlash uchun Missing usulidan foydalanishingiz mumkin:
if ctx.Request().Session().Missing("user") {
//
}Ma’lumotlarni saqlash
Ma’lumotlarni seansda saqlash uchun Put usulidan foydalanishingiz mumkin:
ctx.Request().Session().Put("key", "value")Ma’lumotlarni olish va o‘chirish
Agar siz elementni seansdan olishni va keyin uni o‘chirishni istasangiz, Pull usulidan foydalanishingiz mumkin:
value := ctx.Request().Session().Pull("key")Ma’lumotlarni o‘chirish
Forget usuli seansdan bir qism ma’lumotni olib tashlash uchun ishlatilishi mumkin. Agar siz seansdan barcha ma’lumotlarni olib tashlashni istasangiz, Flush usulidan foydalanishingiz mumkin:
ctx.Request().Session().Forget("username", "email")
ctx.Request().Session().Flush()Seans ID-sini qayta yaratish
Seans ID-sini qayta yaratish ko‘pincha zararli foydalanuvchilarning ilovangizda seans fiksatsiya hujumidan foydalanishining oldini olish uchun amalga oshiriladi. Seans ID-sini Regenerate usuli yordamida qayta yaratishingiz mumkin:
ctx.Request().Session().Regenerate()Agar siz seans ID-sini qayta yaratishni va seansda bo‘lgan barcha ma’lumotlarni unutishni istasangiz, Invalidate usulidan foydalanishingiz mumkin:
ctx.Request().Session().Invalidate()Keyin, yangi seansni cookie-ga saqlashingiz kerak:
ctx.Response().Cookie(http.Cookie{
Name: ctx.Request().Session().GetName(),
Value: ctx.Request().Session().GetID(),
MaxAge: facades.Config().GetInt("session.lifetime") * 60,
Path: facades.Config().GetString("session.path"),
Domain: facades.Config().GetString("session.domain"),
Secure: facades.Config().GetBool("session.secure"),
HttpOnly: facades.Config().GetBool("session.http_only"),
SameSite: facades.Config().GetString("session.same_site"),
})Flash ma’lumotlar
Flash ma’lumotlar faqat keyingi HTTP so‘rovi davomida mavjud bo‘ladigan va keyin o‘chiriladigan seans ma’lumotlaridir. Flash ma’lumotlar holat xabarlari kabi vaqtincha xabarlarni saqlash uchun foydalidir. Flash ma’lumotlarni seansda saqlash uchun Flash usulidan foydalanishingiz mumkin:
ctx.Request().Session().Flash("status", "Task was successful!")Agar siz flash ma’lumotlaringizni qo‘shimcha so‘rov uchun saqlamoqchi bo‘lsangiz, Reflash usulidan foydalanishingiz mumkin:
ctx.Request().Session().Reflash()Agar siz ma’lum flash ma’lumotlarni qo‘shimcha so‘rov uchun saqlamoqchi bo‘lsangiz, Keep usulidan foydalanishingiz mumkin:
ctx.Request().Session().Keep("status", "username")Agar siz ma’lum ma’lumotlarni darhol foydalanish uchun saqlamoqchi bo‘lsangiz, Now usulidan foydalanishingiz mumkin:
ctx.Request().Session().Now("status", "Task was successful!")Seans menejeri bilan ishlash
Maxsus seans yaratish
Maxsus seans yaratish uchun Session fasadidan foydalaning. Session fasad BuildSession usulini taqdim etadi, u haydovchi namunasini va agar siz maxsus seans ID-sini belgilamoqchi bo‘lsangiz, ixtiyoriy seans ID-sini qabul qiladi:
session := facades.Session().BuildSession(driver, "sessionID")Maxsus seans haydovchilarini qo‘shish
Haydovchini amalga oshirish
Maxsus seans haydovchisini amalga oshirish uchun, haydovchi contracts/session/driver interfeysini amalga oshirishi kerak.
// Driver is the interface for Session handlers.
type Driver interface {
// Close closes the session handler.
Close() error
// Destroy destroys the session with the given ID.
Destroy(id string) error
// Gc performs garbage collection on the session handler with the given maximum lifetime.
Gc(maxLifetime int) error
// Open opens a session with the given path and name.
Open(path string, name string) error
// Read reads the session data associated with the given ID.
Read(id string) (string, error)
// Write writes the session data associated with the given ID.
Write(id string, data string) error
}Haydovchini ro‘yxatdan o‘tkazish
Haydovchini amalga oshirgandan so‘ng, uni faqat config/session.go konfiguratsiya fayliga qo‘shishingiz kerak:
// config/session.go
"default": "new",
"drivers": map[string]any{
"file": map[string]any{
"driver": "file",
},
"new": map[string]any{
"driver": "custom",
"via": func() (session.Driver, error) {
return &CustomDriver{}, nil
},
}
},Haydovchi namunasini olish
Haydovchi namunasini seans menejeridan olish uchun Driver usulidan foydalaning. U ixtiyoriy haydovchi nomini qabul qiladi, agar berilmasa, standart haydovchi namunasini qaytaradi:
driver, err := facades.Session().Driver("file")Yangi seansni boshlash
session := facades.Session().BuildSession(driver)
session.Start()Seans ma’lumotlarini saqlash
session := facades.Session().BuildSession(driver)
session.Start()
session.Save()Seansni so‘rovga biriktirish
session := facades.Session().BuildSession(driver)
session.Start()
ctx.Request().SetSession(session)So‘rovda seans mavjudligini tekshirish
if ctx.Request().HasSession() {
//
}