Статті

Що таке сесії в Laravel, налаштування та використання з прикладами

Сеанси Laravel дозволяють зберігати інформацію та обмінюватися нею між запитами у вашій веб-програмі. 

Сеанси Laravel — це простий спосіб зберегти дані для поточного користувача. Цей підручник дасть вам основу для роботи з сеансами в Laravel.

Приблизний час читання: 5 хвилин

Що таке сесія Laravel

У Laravel сеанс — це спосіб зберігати інформацію, правильно обробляти запити, зроблені користувачем. Коли користувач запускає програму Laravel, для цього користувача автоматично запускається сеанс. Дані сеансу зберігаються на сервері, а невеликий файл cookie з унікальним ідентифікатором надсилається в браузер користувача для ідентифікації сеансу.

Ви можете використовувати сеанс для зберігання даних, які ви хочете використовувати на кількох сторінках або запитах. Наприклад, ви можете використовувати сеанс для автентифікації користувача або зберігати іншу інформацію, яку ви хочете використовувати під час сеансу, у своїй програмі.

Налаштування сесії Laravel

Щоб використовувати сеанси в Laravel, ви повинні спочатку ввімкнути їх у файлі config/session.php конфігурації. У цьому файлі можна встановити параметри конфігурації, що стосуються сеансів. Наприклад, тривалість сеансу, драйвер для зберігання даних сеансу та місце зберігання даних сеансу. 

Файл має такі параметри конфігурації:
    • водій: Визначає передсеансовий драйверdefiготовий до використання. Laravel підтримує кілька сеансових драйверів: файл, файл cookie, база даних, apc, memcached, redis, dynamodb і масив;
    • термін: вказує кількість хвилин, протягом яких сеанс має вважатися дійсним;
    • expire_on_close: Якщо встановлено значення true, сеанс закінчиться, коли браузер користувача буде закрито;
    • шифрувати: true означає, що фреймворк шифруватиме дані сеансу перед їх збереженням;
    • файли: якщо використовується драйвер файлового сеансу, цей параметр визначає місце зберігання файлу;
    • зв'язку: якщо використовується драйвер сеансу бази даних, цей параметр визначає підключення до бази даних для використання;
    • таблиця: якщо використовується драйвер сеансу бази даних, цей параметр визначає таблицю бази даних, яка використовуватиметься для зберігання даних сеансу;
    • лотерея: масив значень, який використовується для випадкового вибору значення cookie ідентифікатора сеансу;
    • cookie: цей параметр визначає назву файлу cookie, який використовуватиметься для зберігання ідентифікатора сеансу. Параметри path, domain, secure, http_only і same_site використовуються для налаштування параметрів cookie для сеансу.

    Нижче наведено приклад файлу sessions.php з тривалістю сеансу 120 секунд, використання файлів, що зберігаються в каталозі framework/sessions:

    <?php
    
    use Illuminate\Support\Str;
    
    return [
        'driver' => env('SESSION_DRIVER', 'file'),
        'lifetime' => env('SESSION_LIFETIME', 120),
        'expire_on_close' => false,
        'encrypt' => false,
        'files' => storage_path('framework/sessions'),
        'connection' => env('SESSION_CONNECTION', null),
        'table' => 'sessions',
        'store' => env('SESSION_STORE', null),
        'lottery' => [2, 100],
        'cookie' => env(
            'SESSION_COOKIE',
            Str::slug(env('APP_NAME', 'laravel'), '_').'_session'
        ),
        'path' => '/',
        'domain' => env('SESSION_DOMAIN', null),
        'secure' => env('SESSION_SECURE_COOKIE'),
        'http_only' => true,
    
        'same_site' => 'lax',
    
    ];

    Ви також можете налаштувати сеанс за допомогою змінних середовища у файлі .env. Наприклад, щоб використовувати драйвер сеансу бази даних і зберігати дані сеансу в таблиці сеансу, з базою даних типу MySQL, ви можете встановити такі змінні середовища:

    SESSION_DRIVER=database
    SESSION_LIFETIME=120
    SESSION_CONNECTION=mysql
    SESSION_TABLE=sessions

    Налаштування сесії Laravel

    Існує три способи роботи з даними сеансу в Laravel: 

    Інноваційний бюлетень
    Не пропустіть найважливіші новини про інновації. Підпишіться, щоб отримувати їх електронною поштою.
    • використовуючиhelper з global session;
    • за допомогою фасаду Session;
    • через а Request instance

    У всіх цих випадках дані, які ви зберігаєте в сеансі, будуть доступні в наступних запитах, зроблених тим самим користувачем, доки сеанс не закінчиться або не буде знищено вручну.

    Глобальний помічник сеансу

    У Laravel за допомогою функції Global Session Helper це зручний спосіб отримати доступ до послуг сеансу, які надає фреймворк. Це дозволяє зберігати та отримувати дані сеансу у вашій програмі. Ось приклад того, як використовувати session helper:

    // Store data in the session
    session(['key' => 'value']);
    
    // Retrieve data from the session
    $value = session('key');
    
    // Remove data from the session
    session()->forget('key');
    
    // Clearing the Entire Session
    session()->flush();

    Ви також можете передати попереднє значенняdefinite як другий аргумент функції session, який буде повернено, якщо вказаний ключ не знайдено в сеансі:

    $value = session('key', 'default');

    Примірник Session Request

    У Laravel екземпляр запиту сеансу відноситься до об’єкта, який представляє HTTP-запит і містить інформацію про запит, таку як метод запиту (GET, POST, PUT тощо), URL-адресу запиту, заголовки запиту та тіло запиту. . Він також містить різні методи, які можна використовувати для отримання та маніпулювання цією інформацією.

    Зазвичай ви отримуєте доступ до примірника Session Request через змінну $request у програмі Laravel. Наприклад, до сеансу можна отримати доступ через екземпляр запиту за допомогою допоміжної функції session().

    use Illuminate\Http\Request;
    
    class ExampleController extends Controller
    {
       public function example(Request $request)
       {
           // Store data in the session using the put function
           $request->session()->put('key', 'value');
    
           // Retrieve data from the session using the get function
           $value = $request->session()->get('key');
    
           // Check if a value exists in the session using the has function:
           if ($request->session()->has('key')) {
               // The key exists in the session.
           }
    
           // To determine if a value exists in the session, even if its value is null:
           if ($request->session()->exists('users')) {
               // The value exists in the session.
           }
    
           // Remove data from the session using the forget function
           $request->session()->forget('key');
        }
    }
    

    У цьому прикладі змінна  $request це екземпляр класу Illuminate\Http\Request, який представляє поточний запит HTTP. Функція session екземпляр запиту повертає екземпляр класу Illuminate\Session\Store, який надає різні функції для роботи з сеансом.

    Пов'язані читання

    Ercole Palmeri

    Інноваційний бюлетень
    Не пропустіть найважливіші новини про інновації. Підпишіться, щоб отримувати їх електронною поштою.

    Читайте Innovation своєю мовою

    Інноваційний бюлетень
    Не пропустіть найважливіші новини про інновації. Підпишіться, щоб отримувати їх електронною поштою.

    Слідуйте за нами