在Laravel 5.3中,请求中未设置会话存储。
在Laravel 5.3中,请求中未设置会话存储。
我的网站出现了如下错误:\n\n我尝试过一些解决方案,比如在中间件web中包裹路由,但都没有成功。\n以下是我的 Kernel.php 文件内容:\n
[ \App\Http\Middleware\EncryptCookies::class, \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, \Illuminate\Session\Middleware\StartSession::class, \Illuminate\View\Middleware\ShareErrorsFromSession::class, \App\Http\Middleware\VerifyCsrfToken::class, \Illuminate\Routing\Middleware\SubstituteBindings::class, \anlutro\LaravelSettings\SaveMiddleware::class, \Barryvdh\Cors\HandleCors::class, Activated::class ], 'api' => [ 'throttle:60,1', 'bindings', ], ]; (文件的其余部分) }
\n我该如何解决这个问题 :((
问题原因:在Laravel 5.3中,如果在请求中没有设置会话存储,则会出现"Session store not set on request"的错误。
解决方法:创建一个中间件,并将其包含在应用的中间件堆栈中。
具体步骤如下:
1. 在命令行中运行以下命令,创建一个中间件:
php artisan make:middleware AnyNameYouWant
2. 在生成的中间件文件中,找到handle方法,并添加自己的逻辑。然后,使用redirect函数将请求重定向到所需的位置。
3. 在应用的middleware配置文件中(一般为app/Http/Kernel.php),将刚创建的中间件添加到web中间件组中。具体添加方法是在数组中的web键下面加上中间件类的引用。
4. 保存并关闭文件。
通过以上步骤,我们可以解决"Session store not set on request"的问题。希望这对您有所帮助。
在Laravel 5.3中出现(Session store not set on request)这个问题的原因可能是因为routes没有添加到web middleware中。解决方法是在Kernel.php文件的$middleware数组中添加以下代码:
protected $middleware = [ //... \Illuminate\Session\Middleware\StartSession::class, \Illuminate\View\Middleware\ShareErrorsFromSession::class, ];
这样做可以确保会话(session)的存储(session store)被正确设置在请求(request)中。
在Laravel 5.3中,如果需要使用会话状态(session state)、CSRF保护等功能,需要使用web中间件。下面是如何配置web中间件的示例代码:
在路由文件中,使用Route::group()方法将需要使用web中间件的路由包裹起来:
Route::group(['middleware' => ['web']], function () { // 这里写你的路由 });
接下来,在kernel.php文件中,将需要使用的中间件添加到$middleware和$middlewareGroups属性中,其中包括StartSession中间件来启动会话:
protected $middleware = [ \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class, \Illuminate\Session\Middleware\StartSession::class, ]; protected $middlewareGroups = [ 'web' => [ \App\Http\Middleware\EncryptCookies::class, \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, \Illuminate\View\Middleware\ShareErrorsFromSession::class, \App\Http\Middleware\VerifyCsrfToken::class, \Illuminate\Routing\Middleware\SubstituteBindings::class, // 其他中间件... ], ];
如果遇到了"Session store not set on request"的问题,可以尝试以下解决方法:
1. 确保在路由文件中使用了web中间件,将需要使用会话状态的路由包裹起来。
2. 检查kernel.php文件中的$middleware和$middlewareGroups属性,确保StartSession中间件被添加到了$middleware属性中,并且web中间件被添加到了$middlewareGroups属性中的'web'数组中。
3. 如果以上方法都没有解决问题,可以尝试运行"composer dump-autoload"命令来重新加载类的自动加载文件。
希望以上方法能够帮助解决问题,并让你的应用正常使用会话状态和CSRF保护功能。