当视图返回时,laravel 5.6会话不会保持

时间:2018-02-14 16:07:10

标签: php laravel session

我正在构建一个laravel应用程序,我有web和api路由。 我想在我的路线之间存储会话。 如果我作为会话存储而不返回视图,它可以正常工作。 但是当我返回一个视图时,我的会话不再存在。

我的web.php如下:

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

我的控制器

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');
}

也许它有一些事情要做,我也在api控制器的api路由中存储会话。我的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,
];
}

谢谢!

1 个答案:

答案 0 :(得分:0)

来自docs api路由不使用StartSession中间件,因为会话仅在 web 中间件组中可用

因此仅在网络路线中存储会话