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.

0

Şərh yazmaq üçün hesabınıza daxil olun.