Jacob
Jacob

Reputation: 132

laravel session not persisting when view returned

I am building a laravel application where I have web and api routes. I want to store sessions between my routes. If i store as session without returning a view, it works fine. But when i return a view my session no longer exists.

My web.php is as follows:

Route::get('/', 'ViewController@index');
Route::get('/check', 'ViewController@check');

My controller

public function index(Request $request)
{
    $request->session()->put('test','123456');
    $request->session()->save();

    //echo $request->session()->get('test', 'default_value');

    // return view('welcome'); //If I uncomment this the sessions are not working anymore.
}

public function check(Request $request)
{
    echo $request->session()->get('test', 'default_value');
    var_dump($request->session()->all());
    //return view('welcome');
}

Maybe it has something to do that i also store sessions in my api routes in the api controllers. My api.php:

Route::group(['middleware' => ['web']], function () {
    //board
    Route::get('/board/create', 'BoardController@create');
    Route::post('board/{id}/guess', 'BoardController@guessWord');

    Route::get('/board/set', 'BoardController@set');
    Route::get('/board/get', 'BoardController@get');

    //user
    Route::get('/user', 'UserController@get');
    Route::post('/user/create', 'UserController@create');
});

kernel.php

<?php

namespace App\Http;

use Illuminate\Foundation\Http\Kernel as HttpKernel;

class Kernel extends HttpKernel
{
/**
 * The application's global HTTP middleware stack.
 *
 * These middleware are run during every request to your application.
 *
 * @var array
 */
protected $middleware = [
    \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
    \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
    \App\Http\Middleware\TrimStrings::class,
    \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
    \App\Http\Middleware\TrustProxies::class,
];

/**
 * The application's route middleware groups.
 *
 * @var array
 */
protected $middlewareGroups = [
    'web' => [
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        // \Illuminate\Session\Middleware\AuthenticateSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \App\Http\Middleware\VerifyCsrfToken::class,
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
    ],

    'api' => [
        'throttle:60,1',
        'bindings',
    ],
];

/**
 * The application's route middleware.
 *
 * These middleware may be assigned to groups or used individually.
 *
 * @var array
 */
protected $routeMiddleware = [
    'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
    'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
    'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
    'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
    'can' => \Illuminate\Auth\Middleware\Authorize::class,
    'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
    'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
];
}

Thanks!

Upvotes: 1

Views: 8920

Answers (1)

Mahdi Younesi
Mahdi Younesi

Reputation: 7509

From the docs api routes does not use StartSession middleware because session is only available in web group of middlewares

So store session only in web routes

Upvotes: 3

Related Questions