I'm facing issues with configuring Laravel sessions in my application. I've set the session driver to file in config/session.php, and I'm storing session data as follows in my controller:
Session::put('user', $User);
Session::put('role', $Role);
dd(Session::has('user'));
The session is accessible and shows true when I dd() it inside the controller. However, when I try to access the session in my middleware, CheckUser, it always returns false:
public function handle(Request $request, Closure $next)
{
// Check if 'user' session exists
if (!$request->session()->has('user')) {
return redirect('auth/login');
}
return $next($request);
}
In the bootstrap/app.php, I've added the middleware for session handling:
withRouting(
web: __DIR__.'/../routes/web.php',
api: __DIR__.'/../routes/api.php',
commands: __DIR__.'/../routes/console.php',
health: '/up',
)->withMiddleware(function (Middleware $middleware) {
$middleware->alias([
'CheckUser' => \App\Http\Middleware\CheckUser::class,
\Illuminate\Session\Middleware\StartSession::class,
]);
})
->withExceptions(function (Exceptions $exceptions) {
//
})->create();
However, when I try to access the session in the middleware, it always returns false. I encountered a similar issue before in Laravel 8, where I fixed it by explicitly including the session middleware in app/Http/Kernel.php:
protected $middlewareGroups = [
'web' => [
\Illuminate\Session\Middleware\StartSession::class,
]
];
Things I’ve Tried:
- I’ve set the session driver to file in config/session.php.
- I’ve added the session middleware in bootstrap/app.php and also in Kernel.php.
- I’ve cleared cache and config cache using php artisan config:clear and php artisan cache:clear.
Additional Information:
- Laravel version: 11.x
- Session driver: file
- Middleware: Custom CheckUser middleware
- Accessing session in a controller works but fails in middleware.
Any suggestions or ideas on what might be wrong and how I can fix this?