How to store Laravel sessions in database?

HTTP driven applications like Laravel are stateless, so here sessions provide us a way to store Laravel sessions in form of a user’s information regarding multiple requests. The user’s information is usually placed in a permanent store or backend location that can be acquired using subsequent requests.

Laravel has a variety of session backends that you can access through a meaningful, unified API.

A Laravel application’s session configuration file is in config/session.php. You should properly review the options present in this file. By default, Laravel uses the file session driver, this works best for many applications.

If you are using the database session driver, you will have to create a database table to store the session records. Let us go through the main steps involved to store Laravel sessions in a database.

Store laravel sessions in database

Step 1: Update .env

Firstly, check your database credentials in the .env file, to manipulate database structures in a Laravel application. You must change the default SESSION_DRIVER:file to SESSION_DRIVER:database to make the sessions get stored in the database instead of the file by default.

SESSION_DRIVER=database

Then you must clear the cache using an artisan command as shown below.

php artisan optimize:clear

Step 2: Create sessions table

Secondly, create the table that will hold your session records. Pass in the migration command as shown below.

 php artisan make:migration user_sessions

Now, define the table columns in your migration file as shown below.

Schema::create('user_sessions', function ($table) {
    $table->string('id')->primary();
    $table->foreignId('user_id')->nullable()->index();
    $table->string('ip_address', 45)->nullable();
    $table->text('user_agent')->nullable();
    $table->text('payload');
    $table->integer('last_activity')->index();
});

Run migrate command as shown below to migrate the new sessions table.

php artisan migrate

Step 3: Store sessions

You will now have to store user sessions in the newly creates user_sessions table. Use the Request method in a Controller Class as shown below.

$request->session()->put('key', 'value');

You can use the Global session helper everywhere as shown below.

session(['key' => 'value']);

Step 4: Retrieve a session

There are three methods to pull a session detail, as shown below.

Method 1
$value = $request->session()->pull('key', 'default');

Method 2
session()->get('key')

Method 3
session()->all()

You can either get only key values or entire detail of a session. Save them to a variable or array and insert in the database accordingly.

Leave a Comment