laravel 5.5 会话未在 Web 中间件中启动

laravel 5.5 session is not starting in web middleware

这是我在使用 dd(session()) 时得到的数组。

SessionManager {#551 ▼
  #app: Application {#5 ▶}
  #customCreators: []
  #drivers: array:1 [▼
    "file" => Store {#553 ▼
      #id: "Kg81ge6ve7bPg4Vos5qsKqvU3Bmo2k6U0hQncxY1"
      #name: "project_session"
      #attributes: array:1 [▶]
      #handler: FileSessionHandler {#552 ▶}
      #started: false
    }
  ]
}

它与 auth 中间件一起工作正常。

SessionManager {#739 ▼
  #app: Application {#5 ▶}
  #customCreators: []
  #drivers: array:1 [▼
    "file" => Store {#742 ▼
      #id: "3nTG8ApjScmeivyKtwDw1nsfOQ9hK8lrwkbLJfTa"
      #name: "project_session"
      #attributes: array:5 [▶]
      #handler: FileSessionHandler {#741 ▶}
      #started: true
    }
  ]
}

我正在建立客户登录的网站。我试图通过会话访问货币,它在用户登录时设置。但是当我尝试在会话中设置它时,它没有设置。 当我查看会话文件夹时,每个新请求都有新文件。

希望有人经历过这个。因为我找了很多,也没有找到任何东西。提前致谢。

这是我的 kernel.php

<?php

namespace App\Http;

use Illuminate\Foundation\Http\Kernel as HttpKernel;

class Kernel extends HttpKernel
{

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

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


    protected $routeMiddleware = [
        'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
    ];
}

这是我的 routes.php

<?php
Route::group(['middleware' => ['web']], function(){
    Route::get('/', 'Front\HomeController@index');
    Route::get('/blog','Front\BlogController@index');
    Route::get('/blog/{slug}','Front\BlogController@show');
    Route::get('/{slug}','Front\PageController@show');
});

//Routes For Customer panel
Auth::routes();

Route::get('/customer/home', 'Customer\HomeController@index')->name('home');

Route::group( ['middleware' => ['auth'], 'prefix' => 'customer'], function(){
    Route::resource('products','Customer\ProductController');
    Route::resource('categories','Customer\CategoryController');
    Route::resource('posts','Customer\PostController');
    Route::resource('pages','Customer\PageController');
    Route::resource('packages','Customer\PackageController');
    Route::resource('clients','Customer\ClientController');
    Route::resource('faqs','Customer\FaqController');
    Route::resource('testimonials','Customer\TestimonialController');
    Route::resource('blogs','Customer\BlogController');
    Route::resource('currencies','Customer\CurrencyController');
});

我试图从路由中删除网络中间件,因为有人建议网络中间件会自动设置为路由。因此,如果您添加网络中间件,那么您可以获得路由作为 'web, web' 中间件,但是当我使用 php artisan route:list 获取路由时,它只给我网络中间件。

我不知道会话启动是如何工作的,有没有我可以添加到某个地方的方法,以便我可以启动会话。

因为您的会话中间件插入到网络组中间件中,所以 运行 只是在网络组中间件中。 你应该像这样替换它们并插入到中间件中:

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,
    **\Illuminate\Session\Middleware\StartSession::class,// insert here 
    \Illuminate\View\Middleware\ShareErrorsFromSession::class // insert here**
];

protected $middlewareGroups = [
    'web' => [
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        **\Illuminate\Session\Middleware\StartSession::class,// remove this**
        // \Illuminate\Session\Middleware\AuthenticateSession::class,
        **\Illuminate\View\Middleware\ShareErrorsFromSession::class // remove this**
        \App\Http\Middleware\VerifyCsrfToken::class,
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
    ],

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


protected $routeMiddleware = [
    'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
    'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
    'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
    'can' => \Illuminate\Auth\Middleware\Authorize::class,
    'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
    'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
];