Laravel-də sessiya məlumatlarının saxlanılması üçün Redis-dən istifadə edilməsi
Laravel freymvörkündə sessiya məlumatlarının saxlanılması üçün aşağıdakı imkanlar əlçatandır:
- Fayl
- Memcache
- Redis
- Verilənlər bazası
- Kuki fayllar (cookie)
- Massiv
Yuxarıdakı siyahıda mövcud olan Redis texnologiyası, həmçinin keş məlumatlarının saxlanılması üçün istifadə edilə bilər. Redis məlumatı diskdə deyil, əməli yaddaşda (RAM) yadda saxlayır, ona görə verilənlər bazası ilə müqayisədə daha sürətli işləyir. Bu baxımdan sessiya məlumatlarını faylda deyil, Redis-də saxlamağı sizə tövsiyə edirəm.
Lakin həm keş, həm də sessiya məlumatlarını saxlamaq üçün Redis texnologiyasından istifadə edirsiniszsə, problemlə üzləşə bilərsiniz:
CACHE_DRIVER=redis
SESSION_DRIVER=redis
Keş və sessiya məlumatları başlanğıc ayar kimi eyni Redis bazasında saxlanılır, ona görə siz keşi təmizlədikdə, sessiya məlumatlarını da silmiş olursunuz. Bu, məsələn, sistemə daxil olmuş istifadəçilərin sistemdən çıxması ilə nəticələnəcək.
Həlli yolu
Bu problemin həlli məqsədilə keş və sessiya məlumatlarını saxlamaq üçün müxtəlif Redis bağlantıları yaratmaq lazımdır.
Əvvəlcə config/database.php
faylını açırıq, Redis üçün tənzimləmələri görürük:
'redis' => [
'client' => env('REDIS_CLIENT', 'predis'),
'default' => [
'url' => env('REDIS_URL'),
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD'),
'port' => env('REDIS_PORT', '6379'),
'database' => env('REDIS_DB', '0'),
],
'cache' => [
'url' => env('REDIS_URL'),
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD'),
'port' => env('REDIS_PORT', '6379'),
'database' => env('REDIS_CACHE_DB', '1'),
],
],
Eyni host, şifrə və hostdan istifadə edərək yeni bir bağlantı ('session'
) əlavə edirik, həmçinin verilənlər bazasının nömrəsini ('database' => 2
) dəyişdiririk:
'redis' => [
'client' => env('REDIS_CLIENT', 'predis'),
'default' => [
'url' => env('REDIS_URL'),
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD'),
'port' => env('REDIS_PORT', '6379'),
'database' => env('REDIS_DB', '0'),
],
'cache' => [
'url' => env('REDIS_URL'),
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD'),
'port' => env('REDIS_PORT', '6379'),
'database' => env('REDIS_CACHE_DB', '1'),
],
'session' => [
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD'),
'port' => env('REDIS_PORT', 6379),
'database' => 2
]
],
config/session.php
faylını açırıq, 'connection'
parametrinin qiymətini dəyişib 'session'
edirik:
/*
|--------------------------------------------------------------------------
| Session Database Connection
|--------------------------------------------------------------------------
|
| When using the "database" or "redis" session drivers, you may specify a
| connection that should be used to manage these sessions. This should
| correspond to a connection in your database configuration options.
|
*/
'connection' => 'session',
İndi php artisan cache:clear
əmri vasitəsilə keşi təmizlədikdə, istifadəçilərin sessiya məlumatları silinməyəcək.
Şərh yazmaq üçün hesabınıza daxil olun.