Laravel 5 - session doesn't work

18,632

Solution 1

Laravel 5 handles sessions via a middleware class called StartSession. More importantly, this middleware is a TerminableMiddleware and the code that actually saves the data (in your case to the session file) is located in the terminate method, which is run at the end of the request lifecycle:

public function terminate($request, $response)
{
    if ($this->sessionHandled && $this->sessionConfigured() && ! $this->usingCookieSessions())
    {
        $this->manager->driver()->save();
    }
}

When calling dd(Session::get('aa')); the request is being interrupted before the terminate method of the middleware can be called.

Funnily enough, the Laravel Middleware Documentation actually explains Terminable Middleware logic by giving the Laravel StartSession middleware as an example:

For example, the "session" middleware included with Laravel writes the session data to storage after the response has been sent to the browser.

That being said, try using var_dump() instead of using dd().

Solution 2

With laravel 5.*, you must change the kernel file like bellow:

  'api' => [
            \App\Http\Middleware\EncryptCookies::class,
            \Illuminate\Session\Middleware\StartSession::class,
            'throttle:60,1',
            'bindings',
        ],

then go to storage/framework/session folder and change the permission to 755 if it has another amount, then delete all files in your storage/framework/session path, use your code again to put something in a session, watch the storage/framework/session folder.

If your session work you can see the weird long file that belong to session right now, and you are done!

If your problem is not yet solved, go to config/session and change:

'driver' => env('SESSION_DRIVER', 'file')

to another predefined amount like:

'driver' => env('SESSION_DRIVER', 'array'),

or even

'driver' => env('SESSION_DRIVER', 'database'),

and finally if you have an empty folder of storage/framework/session, you still have a problem for sure !!!

enter image description here

Solution 3

if you're use api route , you might have this problem with your session and most of the time sessions return null , try to use web route for this

Share:
18,632
Limon Monte
Author by

Limon Monte

Has SweetAlert2 helped you create an amazing application? You can show your support by making a donation: https://github.com/sponsors/limonte https://www.paypal.me/limonte

Updated on July 23, 2022

Comments

  • Limon Monte
    Limon Monte almost 2 years

    Here's config/session.php:

    return [
        'driver' => 'file',
        'files' => storage_path().'/framework/sessions',
    ];
    

    My storage/framework/sessions have 755 permissions.

    When I put these 2 line in my controller

    Session::set('aa', 'bb');
    dd(Session::get('aa'));
    

    I receive expected "bb" output. But if I comment first line:

    // Session::set('aa', 'bb');
    dd(Session::get('aa'));
    

    and refresh page, I still expecting "bb" but getting null.

    Also, storage/framework/sessions is empty.

    What should I do to make Session working?