返回视图时,laravel会话未持久 [英] laravel session not persisting when view returned

查看:49
本文介绍了返回视图时,laravel会话未持久的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在构建具有Web和api路由的laravel应用程序.我想存储路线之间的会话.如果我将其存储为会话而没有返回视图,则可以正常工作.但是当我返回视图时,我的会话不再存在.

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.

我的web.php如下:

My web.php is as follows:

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:

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

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,
];
}

谢谢!

推荐答案

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

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

这篇关于返回视图时,laravel会话未持久的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆