Laravel 5 - session doesn't work
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 !!!
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
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, 2022Comments
-
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 gettingnull
.Also,
storage/framework/sessions
is empty.What should I do to make Session working?