Enabling session in lumen framework Enabling session in lumen framework laravel laravel

Enabling session in lumen framework


Last update on 5th of March 2021

(This answer was getting a lot of attention from Laravel community so I thought of updating it.)

Laravel has officially stopped supporting sessions & views in laravel/lumen framework from version 5.2 and on wards.

But laravel still have a component illuminate/session which can be installed in lumen/framework and we can play around with this.

Step - 1

install illuminate/session using

composer require illuminate/session

Step - 2

Now goto bootstrap/app.php and add this middleware

$app->middleware([    \Illuminate\Session\Middleware\StartSession::class,]);

Purpose of adding the above middleware is to start session on every request and save session before serving response.

Step - 3

Now add config/session.php, since it is not present in Lumen by default. You can take session.php from Laravel official repo.

Step - 4

Create framework session storage directory by

mkdir -p storage/framework/sessions

Thanks to DayDream

Step - 5

In bootstrap/app.php add bindings for \Illuminate\Session\SessionManager

$app->singleton(Illuminate\Session\SessionManager::class, function () use ($app) {    return $app->loadComponent('session', Illuminate\Session\SessionServiceProvider::class, 'session');});$app->singleton('session.store', function () use ($app) {    return $app->loadComponent('session', Illuminate\Session\SessionServiceProvider::class, 'session.store');});

Thanks to @xxRockOnxx for finding loadComponent method.It takes 3 arguments,

  • first one is config file name. (file should be present in config/ directory)
  • second is ServiceProvider FQN
  • third is return of this method.

loadComponent just calls the $app->register and inject $app while building the ServiceProvider

How to Use

// Save Session$router->get('/', function (\Illuminate\Http\Request $request) {    $request->session()->put('name', 'Lumen-Session');    return response()->json([        'session.name' => $request->session()->get('name')    ]);});// Test session$router->get('/session', function (\Illuminate\Http\Request $request) {    return response()->json([        'session.name' => $request->session()->get('name'),    ]);});

I've also added example over github supporting from lumen framework v5.6 to all the way to current version v8.0.

https://github.com/rummykhan/lumen-session-example


It is important to that you also use $request->session(), otherwise it will not work.


I tried the solution mentioned above, however, it's also required to create a folder storage/framework/sessions if using the default settings.